gpt4 book ai didi

.net - 如何利用 IObservable/IObserver 摆脱我的 "god object"?

转载 作者:行者123 更新时间:2023-12-02 15:10:19 25 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

看来你可以用 MSDN 替换你的上帝对象此处描述:

To create complex event processing (CEP) applications using the Microsoft StreamInsight platform, you create structures that define the events, objects that produce and consume the events, and query templates that contain the business logic needed to process the events.

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

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

关于.net - 如何利用 IObservable/IObserver 摆脱我的 "god object"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com