很多朋友都会觉得 MVC 非常深奥,非常厉害。其实不然,理解了 MVC 是什么,就会觉得,MVC 其实并不复杂
什么是 MVC?
很久以前,像 php,asp 这类对结构要求并不严格的语言制作网站,往往都是将各种代码混在一起
后来有人提出了模板分离的概念。这是一个好的理念,使代码更容易维护。修改界面,几乎可以不影响后端代码
然而伴随着技术的发展,出现了 MVC 的概念。MVC 就是一种架构模式,它把程序分成了 M(模块)、V(视图)、C(控制器)三个部分
Model 一般是用于编写业务逻辑,V 就是传统意义上的 “模板”,C 则负责处理各种用户输入输出
这样看起来估计很多人还是不能理解 MC 的区别在哪里,我们来举一个例子:
-
一个 CMS,有文章功能,和基本的后台管理功能
-
我可以把文章相关的操作(例如各种 CURD)写到一个类里,其实这就是 M
-
那么 C 呢?当我们试图查看一篇文章,C 就会获取到我们传入的数据(例如文章 ID),然后调用 M 查询出相应的文章,最后调用 V 返回给我们看
-
也就是说,C 将 M、V 连接到了一起
MVC 有什么好处?
诚然,没有好处的事,没人会愿意为此花功夫
MVC 主要有以下几点好处:
方便开发
-
Model 中的代码可以被不同的 Controller 重复使用,这是一个很方便的方法
-
将相同的操作封装到 Model 中,可以减少大量重复代码,也可以减少出错率
-
更加标准化
方便维护
-
如果后期对数据库有什么更改,可以直接修改 Model 达到相应的效果,而不需要修改每个 Controller
-
直接在 Model 中加入一些处理过程,例如有针对性的缓存
-
可以很方便的对某一类操作用全新的方法编写
代码简洁
- 分门别类
MVC 有什么缺点
MVC 并不是完美无缺的,MVC 也有一些缺点:
不适合小项目使用
小项目代码量一般不大,分 MVC 反而显得繁琐
有时候会让代码更加复杂
业务非常麻烦的时候,就会调用很多 Model 层的方法,这会让 Controller 代码变得很长
当然这也是无法避免的问题,只能尽量减少业务逻辑的复杂程度
题外话:类库的角色
其实很多程序还有一个类库的层次,但是,很容易将类库(lib)和模块(Model)弄混,我这里顺便说说这个问题
lib 是较 “底层” 的,比如 MySQL 数据库支持类,邮件发送类。一般情况下 lib 和程序的耦合度并不高,直接将其复制到其他项目即可使用
Model 则是和程序紧密结合的逻辑层