4

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

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

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

虽然它很方便,但让我担心的是,这种类型非常了解系统中其他人的设计方式。我更喜欢一个更通用的集线器,它可以提供可以公开事件或方法或回调或可以使用这些的实例。

我已经看到更多关于反应式框架的 IObservable/IObserver 功能的信息,并且这些功能正在被纳入 .NET 4.0(我相信)。

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

4

1 回答 1

1

看来您可以用 MSDN 在此处描述的内容替换您的上帝对象

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

我们的团队不会很快迁移到 .Net 4.0(很遗憾)。因此,我们通过构建类似于 MAF/MEF 提供的自定义框架来规避上帝对象场景。这使用 Microsoft 所谓的适配器创建了一个分布式知识库。每个适配器只负责它自己的模块,传递数据,事件等。有一个通用的操作符接收数据和事件,处理,并传回各自的适配器。

我对IObservable&的理解IObserver让我相信上帝对象将不是必需的——实际上创建了一个分布式知识库,了解不同部分中正在发生的事情。这些接口的一个明显优势似乎还在于不再需要中间通信器(即适配器)。所以知识的分布实际上是在 IObservable 派生类中。该模型固有地派生出谈话者/响应者关系 - 没有调解/仲裁类。

于 2010-02-16T18:33:56.617 回答