💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 第一步 每当我们要进行重构的时候,第一个步骤永远相同,我们得为即将修改的代码建立一组可靠的测试环境.这些测试是必要的,因为尽管遵循重构可以让我们绝大多数避免引入bug.但我们毕竟是人.有可能犯错,我们需要可靠的测试 重构之前,首先检查自己有一套可靠的测试机制,这个测试机制有自我检验能力 # 分解并重组statement 代码越小越容易管理,代码的处理和移动也就越轻松 ![](https://box.kancloud.cn/31b0c851a3da002f0fa6708793d7df43_675x358.png) ~~~ private double getCharge(double thisAmount, Rental each) { switch (each.getMovie().getPriceCode()) { case Movice.REGULAR: thisAmount += 2; if (each.getDaysRented() > 2) thisAmount += (each.getDaysRented() - 2) * 1.5; break; case Movice.NEW_RELEASE: thisAmount += each.getDaysRented() * 3; break; case Movice.CHILDRENS: thisAmount += 1.5; if (each.getDaysRented() > 3) thisAmount += (each.getDaysRented() - 3) * 1.5; break; } return thisAmount; } ~~~ 重构技术就是以微小的步伐修改程序,如果你犯下错误,很容易便可发现他 任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类理解的代码,才是优秀的程序员 # 搬移金融计算代码 观察amountFor()时,我们发现这个函数来自Rental类的信息,却没有使用来自Customer类的信息 这立刻使我怀疑它是否被放错了位置,绝大多数情况下,函数应该放在它所使用的数据的所属对象内,所以amountFor()应该移到Rental类中 修改这些之后,下一件事就是去掉旧函数. 有时候会保留旧函数,让他调用新函数,如果就函数是一个public函数,而我又不想改其他类的接口的时候 # 去除临时变量 他们只是在自己所属的函数中有效,所以他们会助长冗余而复杂的函数