使用 MVVM Light Messanger 代替事件

问题描述 投票:0回答:2
c# wpf xaml mvvm mvvm-light
2个回答
4
投票

通常,任何 MVVM 框架(Prism、MVVM Light)中的消息都是在具有插件架构的应用程序中的松散耦合组件之间进行通信的好方法,因为您可以通过共享库中声明的合约将消息从一个模块发送到另一个模块。当您单独开发应用程序或在小团队中由高技能程序员开发应用程序时,可以使用它。

否则有一个主要缺点:重构和调试非常困难,因为你不能只点击消息并“查找用法”,你需要先去合约(接口)而不是“查找用法”,然后直观地查找带有订阅/注册指令的地方。此外,开发人员通常会忘记取消订阅消息,因此您将面临问题,即从一个模块发送并打算在同一模块中处理的消息将在其他模块中错误地处理,因此会导致意外行为并产生许多令人痛苦的错误。

以上内容均基于我的个人经验,因此结果可能会有所不同。只要小心消息,它就会对你有好处。另外,在我看来,消息作为事件的替代品有点开销/过度设计,因为当您拥有紧密耦合的组件时,您并不真正需要它。


0
投票

2024 年更新,随着 MVVMLight 被弃用,MVVM Toolkit(其精神继承者)具有 Messenger 类:https://learn.microsoft.com/dotnet/communitytoolkit/mvvm/messenger

性能基准:https://devblogs.microsoft.com/dotnet/announcing-the-dotnet-community-toolkit-800/#improved-messenger-apis-📬

© www.soinside.com 2019 - 2024. All rights reserved.