MVC
MVC即Model、View、Controller,即模型、视图、控制器,这不是框架,而是一种设计的思想。
MVC中的M、V、C分别是什么?
Model --- 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“ Model ”有对数据直接访问的权力,例如对数据库的访问。“Model”不依赖“View”和“Controller”,也就是说, Model 不关心它会被如何显示或是如何被操作。 这样的好处在于模型被写了一次,就可以被多个视图重用。
View --- 视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services.。
Controller --- 控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。
上面是比较具体的介绍,更为简洁的说法如下:
- 控制器(Controller)- 负责转发请求,对请求进行处理。
- 视图(View) - 界面设计人员进行图形界面设计。
- 模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
在使用node+MongoDB搭建博客时,或者说用 express-generate 产生的一个项目时,其中的 views 就是这里的视图,表现为我们写好的模板引擎; 其中的routes就是这里的Controller, 负责处理用户的请求; 其中的medles就是这里的 Model ,负责对数据(库)的处理。 这就是MVC设计模式。
为什么要使用MVC?
首先,最重要的在于MVC的分离使得多个视图使用一个Model成为可能。即不论用什么样的形式显示,我们都可以只使用一个model,使得代码重用率很高。
其次,MVC的分离使得代码之间的耦合度降低,操作更加高效。比如我们希望数据库从MongoDB迁移到MySQL时, 也只需要处理model层的代码,而不会影响到view层和controller层。
最后,这会使你的项目更加的有条理,更容易维护。
一个最简单的MVC实例
/** 模拟 Model, View, Controller */ var M = {}, V = {}, C = {}; /** Model 负责存放资料 */ M.data = "hello world"; /** View 负责将资料输出到荧幕上 */ V.render = (M) => { alert(M.data); } /** Controller 作为M和V的桥梁 */ C.handleOnload = () => { V.render(M); } /** 在网页读取的时候呼叫 Controller */ window.onload = C.handleOnload;
参考: 维基百科