Web前端开发:为何选择MVVM而非MVC
2012-09-16 02:53
856 查看
在Web中充斥着所谓的MVC框架,而在我看来,因为一些关键性的技术原因,MVC在Web前端开发中根本无法使用(对的,是无法,而不是不该) 。
在MVC原始报告中指出:
于是一些奇怪的认识诞生了,比如认为Controller应该是View操作Model的中介。
我曾经尝试设计一个编程模型让所有的事件流经Controller,但是事实上我发现这样的做法非常糟糕。——这个尝试让我从MVC转向了MVVM。
John Gossman(WPF的架构师)在他的文章中提到,
总而言之,对于MVC
为1979年的SmallTalk设计
界面和程序都由同一种语言编写
用户输入完全由程序编写者来处理
View是单纯用于显示
对于MVVM
为2005年的WPF设计
界面多使用标记语言,程序则使用编程语言
用户输入经过UI系统底层处理和分发,多数以事件的形式被用户程序所知
View具有独立性,能够管理部分用户输入并且自行反应(它们常常被称作控件,而非视图)
作为一个Web开发者,在二者之间做出何种选择是显而易见的。
在MVC原始报告中指出:
view永远不会知道用户输入,比如鼠标操作和按键。
很显然,在Web前端,你无法做到这一点,因为Web的程序中,用户的输入必须通过监听窗口、文档和元素上的事件来获得。——而这些东西常常被认为是View。于是一些奇怪的认识诞生了,比如认为Controller应该是View操作Model的中介。
我曾经尝试设计一个编程模型让所有的事件流经Controller,但是事实上我发现这样的做法非常糟糕。——这个尝试让我从MVC转向了MVVM。
John Gossman(WPF的架构师)在他的文章中提到,
Model/View/ViewModel中的View表示可见元素,按钮,窗体,图形或者GUI中更复杂的控件,它会对快捷键进行编码,并且控件自身会管理跟输入设备的交互——这在MVC中本该是Controller负责的(现代GUI环境中发生在Controller上的事情是很长的题外话……我倾向于认为它只是隐藏到后台了,它仍然存在,但是我们不需要像是1979年那样考虑那么多事情了)
MVC这样的结构的正确性在于,任何界面都需要面对一个用户,而Controller “是用户和系统之间的链接”。在经典MVC中,Controller要做的事情多数是派发用户输入给不同的View,并且在必要的时候从View中获取Editor来更改Model,而Web以及绝大多数现在的UI系统中,Controller的职责已经被系统实现了。下面的图片说明了这样的演进过程:总而言之,对于MVC
为1979年的SmallTalk设计
界面和程序都由同一种语言编写
用户输入完全由程序编写者来处理
View是单纯用于显示
对于MVVM
为2005年的WPF设计
界面多使用标记语言,程序则使用编程语言
用户输入经过UI系统底层处理和分发,多数以事件的形式被用户程序所知
View具有独立性,能够管理部分用户输入并且自行反应(它们常常被称作控件,而非视图)
作为一个Web开发者,在二者之间做出何种选择是显而易见的。
相关文章推荐
- 【转】Web前端开发:为何选择MVVM而非MVC
- 浅析前端开发中的 MVC/MVP/MVVM 模式
- MVC 系列:Web前端开发中的MCRV模式
- asp.net开发大型web产品为何选择webapplication而不是website,及结构安排
- web前端之MVC的JavaScript Web富应用开发一:MVC和类
- [置顶] 何为web前端开发?为何这几年如此火爆?
- 基于MVC+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
- 浅析前端开发中的 MVC/MVP/MVVM 模式
- web前端开发培训和自学 哪种选择更适合你
- web前端之MVC的JavaScript Web富应用开发三:模型和数据
- web前端开发培训和自学 哪种选择更适合你
- 浅谈JavaScript前端开发的MVC结构与MVVM结构
- 浅谈JavaScript前端开发的MVC结构与MVVM结构
- 基于MVC+EasyUI的Web开发框架经验总结(1)-利用jQuery Tags Input 插件显示选择记录
- 浅析前端开发中的 MVC/MVP/MVVM 模式
- web前端之MVC的JavaScript Web富应用开发二:事件和监听
- 针对web前端开发不可缺少的调试工具
- 移动web前端开发
- 2018年,web前端开发应该怎么学?
- 如何理解前端框架中的MVVM,MVC,MVW?他们的区别和适用场景分别是什么?