1、Rename Method 重新命名函数
- 函数的名称未能揭示函数的用途。
- 修改函数名称。
- 考虑应该给这个函数写上一句怎样的注释,然后想办法讲注释编程函数的名称。
2、Add Parameter 添加函数
- 某个函数需要从调用端得到更多信息。
- 尽量不要增加参数,有可能带来坏味。
3、Remove Parameter
- 不去掉多余参数,让调用者多费一份心。
4、Separate Qrevy From Modifier 将查询函数和修改函数分离
- 某个函数既返回对象状态值,又修改对象状态(State)。
- 建立两个不同的函数,其中一个负责查询,另一个负责修改。
5、Paraterice Method 令函数携带参数
- 参数的作用为提供变化的接口,可变的东西。
- 若干函数作了类似的工作,但在函数本体中却包含了不同的值。
- 建立单一函数,以参数表达那些不同的值。
6、Replace Pararmeter With Explicit Methods 以明确函数取代参数
- 函数完全取决于参数值而采取不同反应,这里可以理解为不同的动作行为。
- 以明确函数取代参数,可以将不同的业务类型提取出来。
- 还要看和上层的接口定义。
- 如果以参数值觉得函数行为,那么函数用户不但需要观察该函数,而且还要判断参数值是否合法。
7、Preserve Whole Object 保持对象完整
- 参数过多,而且都来自同一个对象,那么将整个对象传入。
- 可以使参数列更稳固,不变化。
- 提供代码的可读性。
- 如果该对象原本与该函数没有依赖关系,这样容易破坏层次关系。
8、Replace Pararmeter With Methods 以明确函数取代参数
- 接受该参数的函数也可以调用前一个函数,让参数接受存者去除该项参数,并直接调用前一个函数。
- 如果调用端通过“其所属对象内部的另一个函数”来计算参数,并在计算过程中“未曾引用调用端的其他参数”,那么你就应该可以将这个计算过程转移到被调用端内,从而去除该项参数。
9、Remove Setting Method 移除设值函数
- CLASS中某个值域,应该在对象初创时被设值,然后就不再改变,去掉该值域的所有设值函数(Setter)。
- 如果为某个值域提供了Setter,这就暗示了这个值域可以被改变。
- 如果Subclass需要对Superclass的Private变量赋初值,解决方法就是使用Superclass构造函数。
10、Replace Constructor With Factory Method 以“工厂模式”取代构造函数
- 简化创建过程,封装创建逻辑。
- 在Subclassing过程中以Factory Method取代type code。
- 在父类中提供了子类的创建过程,不用额外类说明,而且类型一致。
11、Replace Error Code With Exception 以异常取代错误码
- 对于大多数正常情况下做错误判断,显得多余。
- 某个函数返回一个特定的代码(Special Code),以表示某种错误情况,改用异常(Exception)。
- 这种方式更好地将“普通程序”和“错误处理”分开了,使得程序更容易理解。
12、Replace Exception With Test 以测试取代正常
- 面对一个“调用者可预先加以检查”的条件,抛出一个异常,修改调用者,使它在调用函数之前先做检查。