0

我试图避免创建一个monster class,并且我注意到一个不太好的模式,并且很好奇是否有人对这个问题有任何见解。

问题

A很复杂。为了避免“神物”,一些逻辑被推到BandC中。

A 现在用作外观。这取决于 B 和 C。

A -> B
  -> C

但是,A 具有 B 和 C 需要的配置数据。所以我们必须保持数据同步。

b.value1 = a.value1
b.value2 = a.value2

c.value1 = a.value1
c.value2 = a.value2

此外,B 和 C 必须转换数据才能使用它。

b.sum -> b.value1 + b.value2
b.doSomething -> b.sum() ...

c.sum -> c.value1 + c.value2
c.doSomethingElse -> c.sum() ...

为避免编写重复代码,我们将这些转换方法移回 A。

a.sum -> a.value1 + a.value2

b.doSomething -> a.sum() ...
c.doSomethingElse -> a.sum() ...

但这意味着 B 和 C 现在依赖于 A,而不仅仅是它的数据。

A -> B -> A
  -> C -> A

这导致了循环依赖。

我一直在研究依赖注入和工厂模式,这两个想法解决了很多问题,但是我对如何创建一个节点在运行时可配置的对象图感到困惑。换句话说,我需要能够在运行时从外部更改特定节点或节点组的行为。将配置状态沿对象图传播的最佳方式是什么?

编辑

在过去的几个小时里试图将我的想法变成一个问题,我想我可能偶然发现了一个解决方案。我认为我需要做的是创建一个配置提供程序类D,该类将传递到依赖此信息的节点中。

A -> B -> D
  -> C -> D
  -> D

D 管理value1value2提供sum方法。D 还具有在 value1 和 value2 更改时触发的事件,以便依赖节点(A、B 和 C)可以响应更改。

我认为这个解决方案有效,但我还是想发布,以防有​​更好的解决方案。如果这我正在寻找的模式,它叫什么?“提供者”模式?(不要与 ASP.NET 的提供程序模型混淆!)

4

1 回答 1

1

您在寻找观察者模式还是调解者模式。在http://sourcemaking.com/design_patterns/observer上查看

于 2013-11-16T00:45:43.997 回答