什么是MVC

MVC是笔者开始接触应用开发时,碰到的第一个“高大上”的词汇,即Model-View-Controller,是对用户操视图、用户视图操作、操作数据对象的抽象,可以理解为一种开发设计模式,如下图:
从MVC说起 - 图1

其中

  1. Model,是对事物抽象而构建的数据模型,通常对于数据模型,包含属性及操作方法两部分,当然在实际开发过程中的Model要复杂的多,一个Model可能是由多个子Model组合而成,如虚拟机,可以看成是一个Model,但是虚拟机由CPU、内存、磁盘、网卡等硬件信息,各种硬件信息又可以单独抽象出一种资源。

  2. Controller,是相应用户对于用户操作的抽象,如通常说到的CURD操作。操作有时也会比较复杂,如需要运行一段时间才可完成的操作,以创建虚拟机为例,涉及可用计算节点调度,磁盘准备、网卡准备、底层虚拟化平台调度等过程,但是不能让终端User“干等”,因此需要在User触发“创建”操作后,理解告诉User,“创建”操作,系统已接收,正在“创建中”,用户界面可通过接收事件或轮询方式,在虚拟机最终创建完成后,告诉User,虚拟机创建完成。此时的操作导致了Model的“变化状态”,但一般会最终变成终止状态,也就是我们通常说的“最终一致性”。

  3. View,是用户操作界面的抽象,也包含Model及操作事件的合理展示。

什么是MVC框架

MVC框架是MVC模式的一种代码实现,通常在实现上有如下特点:

  1. 根据View、Controller、Model,将整体开发项目分成:展示层、控制层、模型层;

  2. 用户请求与Controller之间的url映射;

  3. View模版渲染或通过ajax请求获取JSON数据渲染;

框架优势

  1. 分层清晰:根据MVC的3层结构,在开发上可以让展示层开发者(如前端开发人员)更加专注于UI/UE,他们不需要去理解后端开发的原理及逻辑;业务逻辑者专注于提供数据模型(数据库构建)及资源API接口;

  2. 复用性高:在业务逻辑不变的情况下,可以根据实际的展示需求,变更展示层,而不需要变更API及后端设计;

  3. 利于工程化管理:将前后端开发及开发者分开管理,利于人员安排及管控进度;

  4. 耦合性底:由于前后端采取接口方式进行交互,只需要确认API,至于前端如何展示、后端如何处理逻辑,各自皆不关心。

框架缺点

  1. 灵活度降低:所有框架的引入,都会对项目的开发进行一些规定,这些规定自然就会降低开发上的灵活性;

  2. 不适用于中小型项目:如果仅仅是简单的建立简单网站,加入MVC这样的框架及定义,会增加开发上的时间及要求,反倒对于项目的进度不利,另外也加大了开发者学习的要求。因此对于中小型的项目,单人开发或1~2个人开发短时间即可完成的项目,引入框架,反而增加了开发代价。

  3. 复杂度增加:对于简单的界面,若严格遵循MVC框架,做到模型、视图、控制器分离,反倒会增加结构的复杂度。