标准的“模型视图控制器”模式和微软的模型/视图/视图模型模式之间有区别吗?
当前回答
简而言之,在MVC控制器中,ViewModel知道(控件)视图,而在MVVM中,ViewModel不知道谁使用它。ViewModel将其可观察属性和操作公开给任何可能对使用它感兴趣的人。这一事实使得测试更容易,因为在ViewModel中没有对UI的引用。
其他回答
简而言之,在MVC控制器中,ViewModel知道(控件)视图,而在MVVM中,ViewModel不知道谁使用它。ViewModel将其可观察属性和操作公开给任何可能对使用它感兴趣的人。这一事实使得测试更容易,因为在ViewModel中没有对UI的引用。
MVVM将视图模型添加到混合中。这很重要,因为它允许您大量使用WPF的绑定方法,而无需将所有特定于UI的部分放在常规模型中。
我可能是错的,但是我不确定MVVM真的强迫控制器混合。我发现这个概念更符合:http://martinfowler.com/eaaDev/PresentationModel.html。我认为人们选择将其与MVC结合起来,而不是将其内置到模式中。
让我惊讶的是,这是一个投票很高的答案,却没有提到MVVM的起源。MVVM是微软社区常用的术语,它起源于Martin Fowler的表示模型。所以要了解这个模式的动机以及与他人的不同之处,首先要阅读关于这个模式的原文。
在web开发中,MVC是服务器端,MVVM是客户端(浏览器)。
大多数情况下,浏览器中的MVVM使用javascript。mvc有很多服务器端技术。
在MVVM中,控制器不会被ViewModel取代,因为ViewModel的功能与控制器完全不同。你仍然需要一个控制器,因为如果没有控制器,你的模型、视图模型和视图就做不了什么…在MVVM中你也有一个控制器,MVVM这个名字是错误的。
在我看来,MVVMC是正确的名字。
正如你所看到的,ViewModel只是MVC模式的一个附加。它将转换逻辑(例如将对象转换为字符串)从控制器移动到ViewModel。
推荐文章
- [Vue警告]:找不到元素
- 模板方法和策略模式之间的区别是什么?
- MVC中的业务逻辑
- 将WPF组合框绑定到自定义列表
- 如何在Kotlin中实现生成器模式?
- 工厂模式和策略模式之间的区别是什么?
- 如何向一个5岁的孩子解释依赖注入?
- 我怎么知道什么时候创建一个接口?
- 在PHP5中创建单例设计模式
- 什么时候我们应该使用观察者和可观察对象?
- 在哪里放置AutoMapper.CreateMaps?
- 使用Enum实现单例(Java)
- 由Jon Skeet撰写的《Singleton》澄清
- 为什么c#不提供c++风格的'friend'关键字?
- Java / Jakarta EE web开发,我从哪里开始,我需要什么技能?