我试图避免创建一个monster class,并且我注意到一个不太好的模式,并且很好奇是否有人对这个问题有任何见解。
问题
A
很复杂。为了避免“神物”,一些逻辑被推到B
andC
中。
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 管理value1
和value2
提供sum
方法。D 还具有在 value1 和 value2 更改时触发的事件,以便依赖节点(A、B 和 C)可以响应更改。
我认为这个解决方案有效,但我还是想发布,以防有更好的解决方案。如果这是我正在寻找的模式,它叫什么?“提供者”模式?(不要与 ASP.NET 的提供程序模型混淆!)