重构坏味道:过长的消息链
2018-01-23 本文已影响0人
Ps天花乱坠
过度耦合的消息链
症状
如果你看到一个对象请求另一个对象,然后在向后者请求另一个对象,然后在请求另一个对象类似:
getPerson().getDepartment().getAddress().getStreet()
,这就是消息链
Message Chains
病因
由于开发者自己知道程序结构的组成所以就放肆的调用,换句话说是因为知道的太多了导致的(迪米特法则)
导致的健康问题
采取这种方式,意味者客户端代码将与查找过程中的链条结构紧密耦合,一旦链条间的任何对象发生变化,客户端就不得不做出相应修改这样的话无形中增加了开发成本。
治疗
Message Chains Refactoring
- 运用 Hide Delegate 对于每个委托关系中的函数,在服务对象端建立一个简单的委托函数
- 调整客户端,令它只调用服务对象提供的简单委托函数
- 如果使用者和服务提供者不在同一个包,考虑修改简单委托函数的访问权限,让客户端
康复
- 减少了类之间的依赖链,适当的封装,使得修改成本变低。
减少了代码量,消除了部分消息链臃肿的重复代码。
Message Chains After Refactoring
Message Chains
Message Chains Refactoring
Message Chains After Refactoring