MVC中的Controller和MVVM中的ViewModel有什么区别?


21

我看不到MVC和MVVM之间的区别。我觉得ViewModel中的Command就像Controller中的Action方法一样。在通过数据绑定修改模型的状态之后,Controller和ViewModel都将通知View刷新自身。两种模式的主要区别是什么?

Answers:


25

控制器和ViewModel在各种方面有所不同。

在MVC中,控制器知道视图,可以更改视图。它也知道模型并且可以调用它。在MVVM中,ViewModel是View的抽象表示,并且不知道具体的UI,它以某种方式包装Model,以便可以根据需要显示它。

在经典MVC中,控制器只是View与Model交互的策略。实际上,有时甚至没有必要使用Controller。在MVVM中,您不需要它,因为如果您需要不同的行为,则可以为同一个视图使用不同的ViewModel。在MVC中,您可能有一个ReadOnlyController或AdminController与模型进行通信。在MVVM中,您可能只有两个ViewModel,然后选择所需的View。

但是它们确实有一些相似之处。在这两种模式中,View都是观察者。在经典MVC中,视图是模型的观察者,在MVVM中,它是ViewModel的观察者。

两种模式都旨在提供关注点分离。MVVM的主要目的是提供View的抽象,完全独立于使用的UI技术。MVC并没有走那么远。它的主要重点是关注点的分离,因此您不必将业务逻辑(模型)放入视图中。

你也可以找到这个答案我的到类似的问题很有帮助。

最后,我应该说两种模式都属于同一个家庭。MVVM是其后代的MVP是MVC的同级产品。如果您想了解更多信息,请单击此链接到Martin Fowler的网站,他详细解释了所有内容。


您难道不认为实现模型的人会最好地理解这些模型视图架构。我相信这是开发人员的选择问题。一个人选择MVC还是MVVM,这取决于他是否希望只花一点点开销就对视图进行整体抽象(对于MVVM)。
Pankaj Upadhyay,

@Pankaj Upadhyay:应该使用哪一个取决于您的要求和技术选择以及平台的特质。
猎鹰

我相信MVC架构对任何事物都足够好,但这可能是因为我还没有遇到特别需要MVVM的问题。IMO,您当然需要对视图进行一些控制,因为使其绝对松散会在将来的升级中增加更多错误
Pankaj Upadhyay

1
@Pankaj Upadhyay:如果您想对各种UI技术使用相同的逻辑,则MVP更为出色。我认为您不一定需要对该视图进行一些控制。它可以是完全独立的,您也可以测试ViewModels-即使不是更好。更好的分离也使设计人员受益,因为可以更好地划分项目的工作。
猎鹰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.