10

什么时候应该使用事件处理程序而不是事件聚合器?

在我的代码中,我有两个由父 ViewModel 控制的 ViewModel,我试图决定是否应该只使用事件处理程序在它们之间进行对话?还是使用事件聚合器?这将只是简单的方法调用,我不需要在它们之间传递参数。

4

2 回答 2

8

在我看来,EventAggregator 通常是您想要将事件发布到整个应用程序时使用的重炮,更具体地说,当您不知道到底是谁在听时。

在您的场景中,情况并非如此,您有 2 个视图模型想要进行通信,但它们都彼此认识。所以没有真正的理由你不能使用events.

我只想提一下,如果你想让它更松耦合——为每个暴露事件的视图模型创建一个接口。这样,每个 VM 将使用其他 VM 的接口而不是特定实例。

于 2012-11-26T13:50:34.613 回答
6

这是一个包含一些好信息的链接(截至 5/2019 仍然有效)... https://docs.microsoft.com/en-us/previous-versions/windows/apps/xx130639(v%3dwin.10 )(微软,棱镜)

“做出关键决策”部分描述了何时使用它。

.NET 中的事件实现了发布-订阅模式。发布者和订阅者的生命周期通过对象引用相互耦合,订阅者类型必须具有对发布者类型的引用。

事件聚合是一种设计模式,它可以在不方便通过对象和类型引用链接的类之间进行通信。这种机制允许发布者和订阅者在没有相互引用的情况下进行通信。因此,.NET 事件应该用于已经具有对象引用关系的组件之间的通信(例如控件和包含它的页面),事件聚合用于松散耦合组件之间的通信(例如两个单独的页面视图模型在应用程序中)。有关详细信息,请参阅事件聚合。

我粗略地认为这表明 C# 事件适用于层(UI 监听总线逻辑)或父/子(监听其包含的设备的仪器),事件聚合适用于同级(例如同级 UI 面板或设备到设备的通信) )。

于 2019-05-14T16:15:38.547 回答