圣诞大减价开始了!

将单向关联更改为双向关联

问题

您有两个类,每个类都需要使用另一个类的特性,但是它们之间的关联只是单向的。

解决方案

将缺失的关联添加到需要它的类中。

之前
将“单向关联”更改为“双向关联”
将“单向关联”更改为“双向关联-之后”

为什么重构

最初,类是单向关联的。但是随着时间的推移,客户端代码需要访问关联的两端。

好处

  • 如果一个类需要反向关联,您可以简单地计算它。但如果这些计算很复杂,最好保持反向关联。

缺点

  • 双向关联比单向关联更难实现和维护。

  • 双向关联使类相互依赖。通过单向关联,其中一个可以独立于另一个使用。

如何重构

  1. 添加一个用于保持反向关联的字段。

  2. 决定哪个职业将成为“主导”。该类将包含在添加或更改元素时创建或更新关联的方法,在其类中建立关联,并调用用于在关联对象中建立关联的实用程序方法。

  3. 创建一个用于在“非主导”类中建立关联的实用程序方法。该方法应该使用参数中给出的内容来完成字段。给方法起一个明显的名字,这样以后就不会用于任何其他目的。

  4. 如果控制单向关联的旧方法在“主导”类中,则使用从关联对象调用实用程序方法来补充它们。

  5. 如果控制关联的旧方法在“非主导”类中,则在“主导”类中创建方法,调用它们,并将执行委托给它们。

Baidu
map