很多朋友都会觉得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则是和程序紧密结合的逻辑层