简单说说 MVC 理论

简单说说 MVC 理论

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