在前端技术的快速发展过程中,MVC(模型-视图-控制器)、MVP(模型-视图-表示器)和MVVM(模型-视图-视图模型)也得到了很多使用。然而,这三种框架模式非常相似,不易分清,易于混淆。本文重在讲述它们的概念和应用场景及它们之间的细微差别,使我们更好的理解和使用这三种框架模式。
MVC全名是Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。它强制将业务数据(Model)与用户界面(View)隔离,使用控制器(Controller)来管理逻辑和用户输入。其模式图为:
MVC框架模式其三个部分的含义为:
MVC的优势
MVP(模型-视图-表示器)是MVC框架模式的一种衍生模式,专注于改进表示逻辑。MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Presenter负责逻辑的处理。在MVP中,当Model变化时,监控Model和更新View,Presenter将Model有效地绑定至View。其模式图为:
MVP与MVC有着一个重大的区别: 在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
在MVP里,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。而且,Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,即重用!
MVP最常用于企业级应用中,因为这类项目需要尽可能多地重用表示逻辑。具有非常复杂的View和大量用户交互的应用程序可能发现MVC并不能完全符合要求,因为这需要更多的控制器。在MVP中,这些复杂的逻辑可言封装在一个表示器中,可以极大的简化维护工作。
MVP的优势:
MVVM(模型-视图-视图模型)是一种基于MVC和MVP的架构模式,它试图更清晰地将用户界面开发从应用程序的业务逻辑与行为中分离。MVVM的全称为Model-View-ViewModel,其中可以将ViewModel看成一个专门的Controller,充当数据转换器,它将Model信息转变成View信息,还将命令从View传递到Model。为此,很多这种模式的实现都要利用声明式数据绑定来实现将View工作从其他层分离。其模式图为:
View与ViewModel:View与ViewModel之间经过数据绑定和事件进行通信,ViewModel不只暴露Model属性,还会访问其他方法和验证类的特性。View处理自己的用户界面事件,必要时将它们映射到ViewModel。 Model和ViewModel上的属性通过双向数据绑定进行同步和更新。 数据触发器也可以使我们进一步地对Model属性的状态变化做出反应。
ViewModel与Model:ViewModel似乎完全负责MVVM中的Model,ViewModel可以为了数据绑定而暴露Model或Model属性,也可以包含接口,用于获取和操作在View中暴露的属性。
MVVM优势:
缺点:
MVP和MVVM都是MVC衍生出来的,它们之间的不同在于每一层对其他层的依赖,以及它们是如何紧密相互绑定的。
MVC、MVP、MVVM这三种框架模式在不同的业务上有不同的适用性,只要能满足业务需要就行。