应用程序范围的Observer是否是有效的解决方案?

时间:2011-01-31 22:18:49

标签: c# design-patterns system.reactive

我正在使用C#中的Reactive框架,如果使用应用程序范围的观察者(Singleton Message Bus)是值得的,我很好奇吗?在应用程序的隔离部分,它就像一个魅力,但我很好奇,如果有人有任何尖叫的智慧,“不!你想到的是什么!”

技术输入以及理论模式知识非常受欢迎!

2 个答案:

答案 0 :(得分:3)

我在一个旧的C / C ++应用程序中使用了这样的方法。它的优点是可以解耦模块,但根据我的经验,它很快就会在更大的应用程序中导致很多问题:

  • 您无法控制应用程序中真正发生的事情。由于每个模块都可以监听消息总线,因此每个模块也可以影响应用程序的每个其他模块。
  • 如果消息总线是通知观察者的唯一方式,发送通知可能会产生不可预测的性能影响。
  • 要解决一些性能问题,您可以尝试启动缓冲消息(“我会做很多事情,所以不要立即做出反应”这样的消息和“好的,我现在已经完成了,你可以处理我告诉你的一切“)但这也可能导致不可预测的影响。

我的结论是全局消息总线对于小型应用程序来说是一个好主意,但对于大型应用程序则不是。通过使用一个全局消息总线来解耦所有模块,您可以有效地实现相反的目标,因为现在每个人都与其他人相关联,从长远来看,再次解开您的应用程序会更加困难。

我建议尽可能使每个模块都独立,并使用专门的观察​​者(见Gang of Four的观察者模式)。

答案 1 :(得分:1)

这种模式被广泛用于减少应用程序组件之间的联系。我在我的一些项目中使用它,它非常舒适和有用。 我一般都在谈论模式,我不知道它是如何在Reactive框架中实现的。