浅析 MVC, MVP 与 MVVM之间的异同

创建于2015.02.03
编辑于2015.06.15


背景

之前在重构组内项目的js代码时,看了许多MVC、MVP、MVVM相关的文章,和各种“MVC”框架写成的todo程序,发现大家对MVC的理解存在分歧,许多框架(包括BackoneAngular等)其实只能算是MV*,而并非MVC,MVP或者MVVM中的任何一种。

在读了Martin Fowler(最先提出MVVM的人)写的一系列有关Presentation Patterns的文章以后,我已经不再去纠结那些框架到底是MVC、MVP还是MVVM了。这些框架只是工具而已,具体的模式在我们的心中。

由于大家对MVC、MVP甚至MVVM有广泛的误解,所以我们并没有这三个模式的完整详细定义,只能尽量去找权威的文章来学习。MVC在很早之前就出现了,但MVP和MVVM的思想应该是Martin Flow提出的,可以通过这篇综述性的文章去详细了解各种GUI架构。

本文主要从程序逻辑的组织以及程序数据流这两个角度来分析这三个模式的异同。

三者之中,我觉得MVP是最简单的模式,所以我会首先分析MVP,然后才是MVC和MVVM。

Read More