我怎样才能利用IObservable / IObserver来摆脱我的“上帝对象”?

时间:2010-02-16 18:09:16

标签: .net system.reactive god-object

在我正在研究的系统中,我有许多组件被定义为接口和基类。系统的每个部分都有一些特定的点,它们与系统的其他部分进行交互。

例如,数据准备组件准备最终需要进入数据处理部分的一些数据,通信组件需要查询不同组件的状态以便中继到外部等。

目前,我使用“神对象”或者对系统不同部分有深入了解的对象将系统的这些部分粘合在一起。它在这里注册事件并将结果传递给那里的方法,在这里创建一个回调方法并在那里返回该方法的结果,并通过多线程队列传递许多请求进行处理,因为它“知道”某些操作具有在STA线程等上运行

虽然很方便,但我担心这一类型对系统中其他人的设计知之甚多。我更喜欢一个更通用的集线器,它可以被赋予可以暴露事件或方法或回调的实例,或者可以使用它们的实例。

我一直在看到更多关于反应式框架的IObservable / IObserver功能,并且正在进入.NET 4.0(我相信)。

我可以利用这种模式来帮助取代我的“上帝对象”吗?我该怎么做呢?是否有任何资源可以将此模式用于此特定目的?

1 个答案:

答案 0 :(得分:1)

您似乎可以使用MSDN在此处描述的内容替换上帝对象

  

创建复杂的事件处理   (CEP)使用Microsoft的应用程序   StreamInsight平台,您创建   定义事件的结构,   生产和消费的对象   事件和查询模板   包含所需的业务逻辑   处理事件。

我们的团队不会很快转移到.Net 4.0(不幸的是)。因此,我们通过构建类似于MAF / MEF提供的自定义框架来绕过 god object 场景。这使用Microsoft称为适配器的内容创建了分布式知识库。每个适配器只负责它自己的模块,传递数据,事件等。有一个共同的操作符接收数据和事件,进程,并传递回相应的适配器。

我对IObservable& IObserver让我相信上帝对象将不再必要 - 实际上创建了一个分布式知识库,了解不同部分内发生的事情。这些接口的明显优点似乎也是不再需要中间通信器(即适配器)。因此,知识的分布实际上是在IObservable派生类中。该模型本质上导出 talker / responder 关系 - 没有调解/仲裁类。