viewmodels之间松散耦合的通信是一个很好的概念。 我使用过Prism Eventaggregator以及MVVM Light Toolkit的Messanger。
如果项目增长,我会收到很多来回的消息。
跟踪我的消息的最佳做法是什么?命名约定?模式? 等等... 你如何跟踪?
答案 0 :(得分:1)
我发现提供包含强类型消息的“Messages”命名空间有很多价值。请记住,明确定义的消息更像是契约/ DTO - 您希望尽可能多地保持解耦,因此应将依赖关系保持在最低限度,否则发送方和接收方都将依赖于公共库。有时,由于消息的性质,这是必要的。
我认为您还会发现许多消息可能遵循特定模式。我称之为Action和Command的两种常见消息模式。行动更像是一个“动词”和一个“主题”。
例如,您可能具有公开T Target的MessageAction,并且该操作是指示更新,选择,添加,删除等的枚举。这是常见的并且通用消息可以包装它,并且您的处理程序会监听泛型关闭他们感兴趣的类型。
Command是一个源自某个地方的Action,然后将一个动作应用于目标。例如,您可能正在向用户添加角色。在这种情况下,您感兴趣的项目是角色,您的目标是用户,您的操作是添加它。那可能是一个CommandAction。
组织消息的另一种常用方法是实现公共接口或基类。然后,在项目中搜索实现者以确定消息的使用位置变得微不足道。
答案 1 :(得分:0)
好问题。以下是我一直在使用的解决方案,但可能有很多替代方案,并且没有找到任何指导。
一种方法是定义扩展基本事件的特定事件:使用prism时的典型示例是CompositePresentationEvent的扩展。
但是,当拥有大量消息时,定义消息的内容有时很有用。通常它可以由消息头,一些消息属性和实际内容来定义。然后,您可以将这些消息放入messagebus中。