.net 我如何利用IObservable/IObserver来摆脱我的";上帝客体;?

.net 我如何利用IObservable/IObserver来摆脱我的";上帝客体;?,.net,system.reactive,god-object,.net,System.reactive,God Object,在我目前正在开发的系统中,我有许多组件被定义为接口和基类。系统的每个部分都有一些特定的点,它们在这些点上与系统的其他部分交互 例如,数据准备组件准备一些最终需要去数据处理部分的数据,通信组件需要查询不同组件的状态以便中继到外部,等等 目前,我使用“上帝对象”或熟悉系统不同部分的对象将系统的这些部分粘合在一起。它在这里向事件注册并将结果传递给那里的方法,在这里创建回调方法并在那里返回该方法的结果,并通过多线程队列传递许多请求以进行处理,因为它“知道”某些操作必须在STA线程上运行,等等 虽然它很方

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

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

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

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

我已经看到了更多关于反应式框架的IObservable/IObserver特性的信息,这些特性正在被应用到.NET4.0中(我相信)


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

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

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

不幸的是,我们的团队短期内不会迁移到.NET4.0。因此,我们通过构建一个类似于MAF/MEF所提供的自定义框架,绕过了god对象场景。这就创建了一个分布式知识库,使用微软称之为适配器的东西。每个适配器只负责自己的模块,传递数据、事件等。有一个通用的操作员接收数据和事件,处理并传递回各自的适配器


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

有趣的链接,但我认为我不能将其用于我的系统。适配器可能是一个想法;用一个属性标记一个方法,该属性标识该方法的使用方式,并将该属性与适配器类型耦合……然而,这正是我们在类级别所做的。但你有这个想法。我们的适配器负责数据、传递事件、消息处理等。后端将其粘合在一起。