2011-04-28 116 views
1

viewmodels之間的鬆散耦合通信是一個很好的概念。 我已經使用了Prism Eventaggregator以及MVVM Light Toolkit的Messanger。如何跟蹤所有的消息

如果項目增長,我會收到大量來回消息。

跟蹤我的消息的最佳做法是什麼?命名約定?模式? etc ... 你如何跟蹤?

回答

1

我發現在提供包含強類型消息的「消息」名稱空間方面有很多價值。請記住,明確定義的消息更像合約/ DTO - 您希望儘可能多地保持解耦,因此應將相關性保持在最低水平,否則發送方和接收方都將依賴共同庫。由於信息的性質,有時候這是必要的。

我想你會發現許多消息可能會遵循特定的模式。兩種常見的消息模式就是我所說的動作和命令。行動更多的是「動詞」和「主題」。

例如,您可能擁有公開T Target的MessageAction,並且該操作是指示更新,選擇,添加,刪除等的枚舉。這很常見,並且一般消息可以包裝它,並且處理程序將偵聽泛型,它們關閉它們感興趣的類型。

命令是一個動作,它起源於某處,然後將動作應用於目標。例如,也許你正在向用戶添加角色。在這種情況下,您感興趣的項目是角色,您的目標是用戶,並且您的操作正在添加它。這可以是一個CommandAction。

組織消息的另一種常見方式是實現通用接口或基類。然後在項目中搜索實現器以確定消息的使用位置變得微不足道。

+0

只是想補充一點,你應該小心以及使用解耦信息,並且不要把它們作爲需要螺絲刀的錘子來使用。例如,在主/細節情況下,使用消息通知細節可能是誘人的。但是對於這個信息,還有其他的東西真的很感興趣?如果不是,可能會更好地公開接口的細節並直接發送消息,而不是通過信使/事件聚合器間接發送。 – 2011-04-29 13:08:24

0

好問題。這裏是我一直在使用的解決方案,但可能有很多替代方案,並沒有找到任何指導。

一種方法是定義擴展基本事件的特定事件:使用棱鏡時的典型示例是CompositePresentationEvent的擴展。

但是,當擁有大量消息時,定義什麼是消息有時很有用。通常它可以由消息頭,一些消息屬性和實際內容來定義。然後你可以把這些消息放到你的消息總線中。