2014-06-05 87 views
0

当涉及到在后台工作的处理程序时,在处理程序实例上实现IEventAggregator是否合法,然后通知ViewModel有关进度?在我看来,处理程序根本不是模型。在ViewModel中的其他类中是否实现IEventAggregator中断MVVM?

例如,如果我们得到一个MyHandler类正在启动一个线程MyThread使用函数MyFunction这是不断报告处理程序中发生的进度。

我研究了很多,如果这确实打破MVVM,但什么都没发现。那是怎么考虑的?

+0

目的只是报告'进度对话框'中的进度? –

+0

@lll不,我希望ViewModel更新一些信息和绑定。 – 0x8BADF00D

+0

你可能没有在事件聚合器上找到太多的工作,因为RX是一个有利的选择。同样的区别,但你很可能会发现搜索这些解决方案更有意义。 –

回答

1

MVVM不是一个严格的规范,虽然可能会在模式的更广泛方面达成共识,但很少有人会关注实现细节。

也许在你的情况中要问的问题是:视图模型可以在NUnit或SpecFlow中独立引发,并且测试的覆盖面很好。如果答案是肯定的,那么在为这个模式提供一个大目标之后,你可以放心一些。其次,您可以询问处理程序是否严格是一个出版商,其行为无需特别了解订阅者的身份。如果答案是肯定的,那是另一个有利的指示。最后,尽管需要更新和设置一些绑定,视图模型可以与模拟处理程序交互吗?这将是另一个有利的迹象。

您所在位置的某些开发人员可能会选择使用Reactive Extensions中的IObservable作为发布工具(我将自己归入该组),但在此级别上,它基本上是实施决策,不一定是设计决策。

模块化,可测试性和透明度在MVVM模式的强大应用程序中扮演着非常重要的角色。如果您正在实现这些目标,那么是否符合某人的MVVM概念将仅基于您的沟通/说服能力。

+0

处理程序确实是一个严格的出版商,不知道订阅者,但我从来没有见过有人在模型或其他类上实现'IEventAggregator'。这就是为什么我问,我有点惊讶,以前没有人问过。 _might选择使用Reactive Extensions_中的IObservable是什么意思?你可以在这里了解更多细节吗? – 0x8BADF00D

+0

反应式扩展比Prism更“原生”(即内置于.NET)。它比聚合器更灵活,所以开发者可以选择使用它。 –

+0

我已经研究了RX中的'IObservable'和事件机制,但实际上我还不确定使用RX而不是Caliburn.Micro(或两者)。因为IEventAggregator将完全满足我的需求,所以我没有看到有'IObservable'的真正区别。感谢您的支持。最后,在你提到上述情况的时候,你会说这两个结构之间有什么区别吗,不过'IObservable'在某些时候可能更加灵活? – 0x8BADF00D

相关问题