"决定把责任放在哪儿”是对象技术中非常重要的事情之一。
- Move Method
如果某个函数与其所在之外的另一个类有更多的交流,考虑将函数移到那个类中。其中我们需要观察该函数中所需要的数据及调用的方法都是来自哪些类,然后确定函数与各个类的亲密性。 - Move Filed
如果类中的某个字段,在其所驻之外的另一个类中有更多函数使用了它,就考虑搬移这个字段。 - Extract Class
一个类应该是一个清楚的抽象,处理一些明确的责任。(尽可能的单一职责),如果发现某个类责任过于繁重,考虑提取类进行重构。 - Inline Class
如果一个类不在承担足够的责任,不再有单独存在的理由,我们可以使用Inline Class使代码更简洁 - Hide Delegate
在服务类上建立客户所需要的所有函数,用以隐藏委托关系。也就是我们为客户端程序提供统一的接口,隐藏其实现细节,利于客户端使用,并且后续实现内部的变化不会波及客户端程序。 - Remove Middle Man
和Hide Delegate相反,如果某个类做了过多的简单委托动作,可以移除之,让客户直接调用受委托类。关于隐藏程度的问题,作者也很难回答,只能是随时重构。 - Introduce Foreign Method
如果我们需要为不可变更的提供服务的类增加一个函数,可以将类的对象传给某个Helper函数。 - Introduce Local Extension
如果你需要为无法更改的服务类提供大量的扩展,我们就可以创建服务类的扩展类。使用扩展类的时候我们需要权衡子类和包装类。如果我们能完全控制对象的创建,优先使用继承。如果我们使用继承,尽量不要覆写函数。
网友评论