昨天我们讲了“隐藏"委托关系"(HideDelegate)”,因为了减少类信息的泄漏而要把类间的委托关系隐藏起来。但当我们建立大量委托行为后,使用“隐藏"委托关系"(HideDelegate)”的成本就非常大了;我们要记住大量的委托函数,反而不利于代码的理解、代码的可读性也相对的降低了(函数多了会造成视觉疲劳,毕竟我们每天都要看大量的代码、大量的资料),所以当我们感觉到类的委托函数有增多的趋势时,我们就要把这委托函数给去掉,我们称这种手法为"移除中间人(RemoveMiddleMan)"。
从上面的讲解,聪明的你一定发现了其实“隐藏"委托关系"(HideDelegate)”跟"移除中间人(RemoveMiddleMan)"刚好是相反的。我们很难说什么程度适合用“隐藏"委托关系"(HideDelegate)”,什么时候用"移除中间人(RemoveMiddleMan)";但还好我们并不用去担心这一问题,因为你可以随心所欲的进行调整,只要你觉得哪种合适就用哪种。对代码进行重构的意义就在于:你永远不必说对不起——只要把出问题的地方修补好就行。
代码如下,可供参考
重构前
[AppleScript] 纯文本查看 复制代码 class Person
{
private Department _department;
public Department Department { get; set; }
public Person getModerager()
{
return _department.getManager();
}
}
[C#] 纯文本查看 复制代码 class Department
{
private string _chargeCode;
private Person _managet;
public Department(Person manager)
{
_managet = manager;
}
public Person getManager()
{
return _managet;
}
}
重构后
[C#] 纯文本查看 复制代码 class Department
{
private string _chargeCode;
private Person _managet;
public Department(Person manager)
{
_managet = manager;
}
public Person getManager()
{
return _managet;
}
}
参考文献
重构——改善既有代码的设计 【美】Martin Fowler 著
熊节 译
|