【问题标题】:How can I take advantage of IObservable/IObserver to get rid of my "god object"?如何利用 IObservable/IObserver 摆脱我的“上帝对象”?
【发布时间】:2010-02-16 18:09:16
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: .net system.reactive god-object


    【解决方案1】:

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

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

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

    我对@9​​87654322@ 和IObserver 的理解让我相信上帝对象 将不是必需的——实际上创建了一个分布式知识库,了解不同部分的情况。这些接口的一个明显优势似乎是不再需要中间通信器(即适配器)。所以知识的分布实际上是在 IObservable 派生类中。该模型天生就派生出 talker/responder 关系 - 没有调解/仲裁类。

    【讨论】:

    • 有趣的链接,但我不认为我可以将它用于我的系统。适配器可能是一个想法;用一个属性标记一个方法,该属性标识该方法的使用方式,将其与适配器类型耦合....
    • 这正是我们正在做的——然而,在班级层面。但你有这个想法。我们的适配器负责数据、传递事件、消息处理等。后端将它们粘合在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多