上一节我们讲了软件开发的框架,其中提到了MVC架构模型,就有读者让我介绍一下啥是架构模型,啥是MVC。
MVC(建模、视图、控制器)是最常用的开发模型之一,它可以有限的分离应用的各个功能模块,提升编程协同效率。回到我们上一章所讲的,以下的网页开发框架都分别用到了MVC的概念(只是借用概念,有些并没有完全严格的目录结构,比如Django):
Ruby框架:
Ruby on Rails
Sinatra
JavaScript框架:
Express
Backbone
Angular
PHP框架:
Laravel
Codeigniter
Zend
Python框架:
Django
Flask
接下来我们一一来介绍下MVC。
M指建模(Model),是整个MVC模型的大脑,它接收并处理数据,因此与数据库有直接交互,可以是关系型数据库,如MySQL;抑或是非关系型数据库,如MangoDB;甚至是可以是从单个文件拉取,如JSON。在接入不同数据库的时候,Model的代码并不会有差异,只是对接的数据库驱动程序需要更新。Model还会与控制器(Controller)通信,通常情况下控制器向模型请求数据,获取数据后,控制器更新视图(View);当然还有些情况Model可以直接更新视图。
V(View)当然是指整个应用的视图界面,也就是与用户交互的界面。视图通常包含HTML及CSS样式,视图内容是由控制器获取的动态数据,因此视图也会与控制器甚至模型交互。根据我们选取得不同模型引擎可以实现不同层级的用户交互:比如说静态HTML页面引擎,就不能输出变量,不能设定交互逻辑;亦比如说JavaScript的dust引擎可以定义各种交互逻辑(if、while等等),与此类似的还有Ruby的ERB引擎以及Python的flask引擎。
C(Controller)控制器用来接收用户输入,包括用户访问一个页面、点击一个链接(GET请求)、提交一个表单(POST请求)以及不能在浏览器端直接执行的DELETE和PUT请求(只有开放框架的客户端浏览器可以)。控制器的作用类似于视图和模型的中间人:它会要求模型(Model)从数据库中获取数据,然后将数据加载到视图(View),之后模板引擎将数据结合预编译的逻辑和交互形式呈现给用户。
以上是交互示意图:用户从浏览器中看到应用的视图(View),然后在浏览器中提交请求,浏览器将请求通过“路由器”传递给控制器,控制器判断请求的内容做出响应,可能是直接更新页面(比如重定向请求等),也可能是返回数据。前者直接与应用的视图交互,后者与模型交互,让模型从数据库获取相应的请求数据。


长按,识别二维码,加关注