将单向关联更改为双向关联
问题
您有两个类,每个类都需要使用另一个类的特性,但是它们之间的关联只是单向的。
解决方案
将缺失的关联添加到需要它的类中。
之前

后

为什么重构
最初,类是单向关联的。但是随着时间的推移,客户端代码需要访问关联的两端。
好处
- 如果一个类需要反向关联,您可以简单地计算它。但如果这些计算很复杂,最好保持反向关联。
缺点
双向关联比单向关联更难实现和维护。
双向关联使类相互依赖。通过单向关联,其中一个可以独立于另一个使用。
如何重构
添加一个用于保持反向关联的字段。
决定哪个职业将成为“主导”。该类将包含在添加或更改元素时创建或更新关联的方法,在其类中建立关联,并调用用于在关联对象中建立关联的实用程序方法。
创建一个用于在“非主导”类中建立关联的实用程序方法。该方法应该使用参数中给出的内容来完成字段。给方法起一个明显的名字,这样以后就不会用于任何其他目的。
如果控制单向关联的旧方法在“主导”类中,则使用从关联对象调用实用程序方法来补充它们。
如果控制关联的旧方法在“非主导”类中,则在“主导”类中创建方法,调用它们,并将执行委托给它们。