屏幕同步 - 事件聚合器VS缓存ViewModel参考

时间:2009-12-27 10:29:55

标签: .net data-binding mvvm eventaggregator

我做了一些功课,找不到任何关于何时使用每种方法的最佳实践的文章..

只是为了澄清: 使用事件聚合器模式时:每个屏幕都有自己的viewmodel引用,viewmodel使用eventaggregator发布更改,后者观察者将使用它来同步其状态。

缓存ViewModels :每个屏幕都有viewmodel的保存参考,绑定到视图模型属性的控件是同步的, 因为应用程序中的每个屏幕都具有相同的视图模型引用(从缓存中获取),所有屏幕都通过数据绑定进行同步。

何时使用每种方法?专业人士使用每个人的想法是什么?

3 个答案:

答案 0 :(得分:1)

嗯,正如我所看到的,事件聚合器方法更具可扩展性,并提供了更加分离的设计。

当可扩展性不是问题时,单个VM(或多个VM缓存)方法很好,因为随着越来越多的视图被添加,VM可能会增长到可怕的比例。

总之,事件聚合器方法是构建为持久的系统的“正确”方法,但如果您为特定的有限目的和生命周期构建内部工具,则可以使用更简单的方法。

答案 1 :(得分:0)

感谢您的快速回复! 只有当同一个VM类用于多个屏幕时,你所说的才是真的,并且满足每个屏幕的合同(在这种情况下,vm可能包含冗余字段,在某些屏幕上没有使用它们)。

但是当你使用合成时,使用更细粒度的方法很容易解决这种情况...

不过,我同意事件聚合器更加分离...... 还有其他一些考虑吗?

答案 2 :(得分:0)

另一个适用于公共数据的选项是直接绑定到单个Observer类,该类公开必要的属性,而不是在需要同步的多个视图模型中具有重复属性。

虽然使用观察者比订阅/发布到事件聚合器更加耦合,但是当使用IOC容器注入观察者接口时,耦合仍然相当松散,并且很容易确定哪些视图模型依赖于哪些观察者。