【问题标题】:How should messages (not exceptions) be passed from the Model/Business Object layer to the UI?消息(不是异常)应该如何从模型/业务对象层传递到 UI?
【发布时间】:2011-04-11 17:25:15
【问题描述】:

使用 VB.net 4.0

我有一个松散地基于 MVVM 的 Winforms 应用程序。我正在为任何层(即使是那些 UI 没有参考的层)寻找一种简单的方法将消息传递回 UI 以显示给用户。

我过去通过在“Common”程序集中创建一个“Communicator”类来实现这一点,其他程序集都会引用该类。

Public Class Communicator

Public Shared Sub NotifyUser(Message as string)
    RaiseEvent SendMessage(Message)
End Sub

Public Shared Event SendMessage(MessageToSend as string)

End Class 

UI 将在程序启动时订阅 SendMessage 事件。任何想要向用户传递消息的类都只需调用 Shared NotifyUser 方法,然后 Communicator 类将通过 SendMessage 事件将给定消息传递给 UI。

这种方法的好处是它很容易实现,并且在代码中的任何地方都超级容易使用。

我认为这样做的缺点是对 NotifyUser 的调用遍布整个代码,使得许多类依赖于 Communicator 类及其共享方法。不知为何,感觉不对。

那么,我的问题是,有哪些典型的方法可以在不显着增加复杂性的情况下达到相同的效果?

【问题讨论】:

    标签: .net events mvvm messages


    【解决方案1】:

    老实说,事件是好的(有你指出的缺点)。另一个选项是Mediator pattern,它或多或少听起来像是您已经实现的,只是没有事件。

    【讨论】:

    • 您能举一个例子,说明使用事件的方式与我发布的方式不同吗?从理论上讲,我知道您可以直接在任何想要发送消息的类上触发事件,但这意味着在创建时连接每个想要这样做的类。我很好奇其他解决方案/示例。
    • 我建议你不要实际使用事件。它们会导致紧密耦合,如果没有正确实现,还会导致内存泄漏。而是使用基于消息的方法,其中对象注册以根据消息获得通知。这是我想到的一种实现方式。它适用于 WPF,但只需很少或没有更改即可为您工作。 marlongrech.wordpress.com/2009/04/16/…
    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 2011-01-18
    • 2013-03-12
    • 1970-01-01
    • 2011-11-18
    • 2011-06-08
    • 2016-06-18
    • 1970-01-01
    相关资源
    最近更新 更多