简单说说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则是和程序紧密结合的逻辑层