使用单例在任意两个类之间发送消息

时间:2014-10-12 04:41:37

标签: c# events design-patterns singleton global-variables

使用单例在类之间发送消息是好还是坏?

通信的一端注册为侦听器(侦听某个字符串或对象,可能带有一些参数),另一端发送消息。任何消息都可以有多个或没有侦听器。

使用这样的模式意味着不同项目中的对象可以在没有彼此引用的情况下进行通信。

这可能有用的情况是将应用程序中的所有错误发送到一个对象。您可以轻松地从应用程序的任何部分发送错误,并且错误管理器可以侦听已发生的任何错误。

采取这种方法的缺点是什么?

考虑到的问题是全局变量使测试很难以及出现意外后果的可能性,因为应用程序中的任何内容都可能正在监听事件和完全不相关的项目。

3 个答案:

答案 0 :(得分:1)

对于类似的情况,我喜欢使用Observer pattern并使事件调度程序成为单例。

enter image description here

答案 1 :(得分:0)

为什么不使用Event Aggregator?就像Prism提供的一样。 http://blog.magnusmontin.net/2014/02/28/using-the-event-aggregator-pattern-to-communicate-between-view-models/

使用Singleton在单元测试中存在风险。

答案 2 :(得分:0)

或......作为另一种选择Mediator design patterm。因为按概念,它定义了一个封装一组对象如何交互的对象。 Mediator通过使对象明确地相互引用来促进松散耦合,并且它允许您独立地改变它们的交互。

关于

  

难以进行测试

你总是可以考虑嘲笑。