三层架构是软件体系架构设计中的一种架构模式,它可适用于任何一个项目。MVC是子系统或软件系统框架提炼抽象中的一种设计模式,它是根据项目的具体需求来决定是否适用于该项目。往往这两者总是被混为一谈,笼统的认为都是架构。那它们的区别是什么呢?下面我们一起来看看我所知道的一些真相。
一、概念的不同
1、三层架构
三层架构(3-tier application) ,通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
(1)表现层(UI,User Interface Layer):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
(2)业务逻辑层(BLL,Business Logic Layer):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
(3)数据访问层(DAL,Data Access Layer):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
在软件体系架构设计中,分层的目的即为了“高内聚,低耦合”的思想,分层式结构是最常见,也是最重要的一种结构,微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
2、MVC
MVC(Model View Controller),通常意义上的MVC框架就是将整个应用架构的表现层划分为:模型(Model)、视图(View)、控制器(Controller)。
(1)模型(Model):模型表示企业数据和业务规则,主要负责处理业务逻辑,用来储存数据的组件(与领域模型概念不同,两者会相互交叉),提供数据,数据之间的关系、转化等,并可以通知视图和控制器自己哪些地方发生了变化。
(2)视图(View):视图是用户看到并与之交互的界面,主要负责显示数据和提交数据,能根据m的改变来更新自己。
MVC是一种设计模式即GUI界面开发的指导模式,MVC可以与三层架构共存,把三层架构中的表现层再度进行了分化,分成了控制器、视图、实体三个部分,呈三角形结构。
二、具体应用的不同
三层架构和MVC同属于架构级别的,相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。三层是基于业务逻辑来分的,主要用于体系架构;而MVC是基于页面来分的,主要用于表现层。
1、控制器,在三层架构中没有定义Controller这个概念,这也是最不同的地方,而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构和MVC搭建框架最主要的区别。控制器完成页面逻辑,确保M和V的同步,通过实体来与用户界面完成通话,一旦M改变,V应该同步更新;而控制器直接与三层中的BLL进行对话。
2、Model,在三层中同样也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC里则是由业务逻辑与访问数据组成的。
3、分离,存在单向引用,例如Model不知道View和Controller的存在,View不知道Controller的存在,这就隔离了表现和数据。View和controller是单向引用,而实际中View和Controller也是有数据交互的。
(1)模型与控制器和视图相分离
模型是自包含的,所以很容易改变应用程序的数据和业务规则。
(2)View和数据(Model)的分离
使用不同的View对相同的数据进行展示;分离可视和不可视的组件,能够对Model进行独立测试,因为分离了可视组件减少了外部依赖利于测试,实际上数据库也是一种外部组件。
(3)View和表现逻辑(Controller)的分离
Controller是一个表现逻辑的组件,并非一个业务逻辑组件,分离逻辑和具体展示,能够对逻辑进行独立测试。
4、模式,三层架构是分层架构模式,是典型的上下关系,上层依赖于下层;但MVC作为表现设计模式是不存在上下关系的,而是相互协作关系,MVC是一个复合模式,一种解决方案,MV和MC都是观察者模式、M内部是组合模式、VC之间是策略模式(可以随时更换不同的控制器)。本质上,MVC和三层架构没有可比性,是应用于不同领域的一种模式,三层架构和MVC设计模式侧重点不一样,三层是一种笼统的架构思想,没有限制具体的设计;而MVC就比较具体的说明它的设计方法。
5、解决方案
1、三层架构,是系统架构设计模式,属于宏观的解决方案。由于原有业务的复杂度提升,客户端和服务器端的职能需要调整,从而实现负载均衡,使系统具有良好的伸缩性。三层架构对原有程序进行了分层,不同的层运行在不同的机器上,所以可以非常自然地支持分布式开发,系统的分布式部署,便于提升系统性能,增加系统功能。
如果从解耦的角度来看三层架构和MVC其实他们是一致的,只不过划分的领域和方法不一样罢了,从这一点说它们可以说是一个东西。知识的学习过程就要像老牛反刍一样,对事物的认识是从感性到理性的,需要一步一步的不断的加深认识,每一步的加深也许会推翻以前的自己,也许会更加赞同以前的自己,最终才能真正领悟。