MVC是横向分工;三层架构,是纵向分层。
在大多数架构图中,MVC被画成三角形,View是使用者能够看到并操作的层(可能是Web页面,也可能是GUI),Controller是处理各种操作请求的核心,Model是用于保存各种数据,并且会影响View的显示结果。
而三层架构,通常会被画成上中下三层,上层是前端;中层是业务逻辑;底层是数据存储。
从这个介绍来看,MVC与三层架构的确似乎存在对应关系。在很多简单项目中,我们可以将业务逻辑写在Controller里,而保存数据的逻辑也无非是数据库的表与Mode的简单对应而已。
但是,随着项目越来越复杂,我们发现业务逻辑已经非常复杂,把所有的代码写在Controller里,是一种糟糕的实践,因此:我们将关键的业务逻辑抽取出来,形成一个独立的业务逻辑层。而且,这一层往往以某种Service API的方式,被Controller调用。
另一方面,我们也发现数据越来越多,越来越大,越来越复杂。简单的ORM已经不够用了,必须编写更加独立、通用的数据访问层。这时候,就需要改写原来的Model,对于上层应用而言,使用方式保持不变。
还有一些重要的技术发展,产生在前端领域,尤其是We前端的JS框架、CSS、HTML5等等技术,使得在前端,出现了完整的“前端MVC”,或者现在叫“前端MVVM”了。
大概是这么一个发展的路径,要详细谈的话,就太多了。