Message Chains

过度耦合的消息链

症状

如果你看到一个对象请求另一个对象,然后在向后者请求另一个对象,然后在请求另一个对象类似:getPerson().getDepartment().getAddress().getStreet()
,这就是消息链

Message Chains_第1张图片
Message Chains

病因

由于开发者自己知道程序结构的组成所以就放肆的调用,换句话说是因为知道的太多了导致的(迪米特法则)

导致的健康问题

采取这种方式,意味者客户端代码将与查找过程中的链条结构紧密耦合,一旦链条间的任何对象发生变化,客户端就不得不做出相应修改这样的话无形中增加了开发成本。

治疗

Message Chains_第2张图片
Message Chains Refactoring
  • 运用 Hide Delegate 对于每个委托关系中的函数,在服务对象端建立一个简单的委托函数
  • 调整客户端,令它只调用服务对象提供的简单委托函数
  • 如果使用者和服务提供者不在同一个包,考虑修改简单委托函数的访问权限,让客户端

康复

  • 减少了类之间的依赖链,适当的封装,使得修改成本变低。
  • 减少了代码量,消除了部分消息链臃肿的重复代码。


    Message Chains_第3张图片
    Message Chains After Refactoring

你可能感兴趣的:(Message Chains)