我试图避免创建一个 怪兽类, 和我注意到一个不太好的模式,并很好奇如果任何人有任何深入了解这个问题。

的问题

A 是复杂的。为了避免"上帝对象",一些逻辑推出入 BC.

一个现在作为一个 外观.它取决于B和C。

A -> B
  -> C

然而,一个有结构的数据,B和C的需要。因此,我们必须保持的数据同步。

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

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

还a、B和C中必须将数据转换到使用它。

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

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

为避免重复代码,我们将这些转换方法回答

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

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

但是,这意味着B和C,现在取决于一个,不只是它的数据。

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

和这个结果在一个圆形的依赖。

我一直在研究依赖注射和工厂模式,这两种想法已经解决了很多问题,但我难住了对如何创建一个 象图 其节点的配置在运行时间。换句话说,我需要的能力来改变行为的一个具体的节点或节点组在运行时,从外部。什么是最好的方式传播配置状态下的一个对象图?

编辑

花了最后的几个小时试图制定我的想法变成一个问题,我想我可能无意中发现成的解决方案。我想我需要做的是创建一个结构类提供者 D 获得通过进入点,依赖这个信息。

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

D管理 value1value2 提供的 sum 法。D还有事件,火灾当值1和值2的变化使得依赖的节点(A、B和C)可以回应改变。

我认为这个解决方案的工作,但我想以后如情况有一个更好的解决方案。如果这个 图案我在寻找,它叫什么?"提供"模式?(不要混淆ASP.NET's 提供的模型!)

有帮助吗?

解决方案

你找观察员或调停人的模式。检查出来 http://sourcemaking.com/design_patterns/observer

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top