在ViewModel以外的类中实现IEventAggregator是否会破坏MVVM?

时间:2014-06-05 19:49:12

标签: c# wpf mvvm caliburn.micro

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

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

我研究了很多,如果这确实打破了MVVM但却一无所获。怎么考虑?

1 个答案:

答案 0 :(得分:1)

MVVM并不是一个严格的规范,虽然可能会对模式的更广泛方面达成共识,但很少有人会对实现细节进行直观的了解。

在您的案例中可能要问的问题是:视图模型是否可以在NUnit或SpecFlow中独立提出,并且可以在良好的覆盖范围内进行测试。如果答案是'是',那么你可以安排一下这个模式的大目标。其次,您可以询问处理程序是否严格地是一个发布者,其行为不需要特别了解订阅者是谁。如果答案是'是',那是另一个有利的迹象。最后,尽管需要更新和设置一些绑定,视图模型是否可以与模拟处理程序交互?这将是另一个有利的迹象。

在您的情况下,某些开发人员可能会选择使用Reactive Extensions中的IObservable作为发布工具(我将自己视为该组),但在该级别上,它基本上是一个实现决策,而不一定是设计决策。

模块化,可测试性和透明性在制作像MVVM模式一样强大的应用程序方面起着重要作用。如果您正在实现这些目标,那么它是否符合某人的MVVM概念将完全基于您的沟通/说服技巧。