我读到有关在MVVM设计中实现的Event Aggregator模式可以帮助解耦ViewModel之间的通信。
我认为Event Aggregator真是个好主意。但是,第二个想法是,事件聚合器是否仅由ViewModels使用?模型是否可以在事件聚合器中发布和订阅事件?
通过这个,也许,ViewModel和Model之间的数据变化可以通过EventAggregator进行关联。这可能允许一个ViewModel从多个模型中检索信息,而无需ViewModel来存储对所有模型的引用。
如果我这样做,是否会导致整个架构变得混乱并最终变成反模式?什么是最佳做法?
修改
我想我应该解释一下我为什么要问这个问题。我看到了三个可能的问题:
首先,所以使用DI,我的ViewModel包装了Model。然后我的ViewModel可以与我的模型通信。但是,不是相反。因此,如果我的模型本身或外部都有一些更改,则需要一种方法来通知其ViewModel。
第二,除了ViewModels必须与其他ViewModel进行通信之外,在我看来,模型必须与ViewModel一样多,甚至更多地与其他模型进行通信。这些导致我认为我可以将所有内容链接到EventAggregator。
第三次,我发现在某些情况下,单个ViewModel需要从多个模型中提取信息。但是通过ViewModel构造函数的依赖注入,它只能从一个模型中读取。
答案 0 :(得分:7)
有几个地方您可能想要使用事件聚合器:
值得记住的是,使用事件聚合器存在缺陷:
通常我不使用事件聚合器来为服务通信提供服务(在我的主要工作项目中,我们有20个事件,其中只有1个是服务服务)。这是因为我的大多数服务调用都是简单的一次性数据请求,而不是连续的更新流。