参考:http://www.ruanyifeng.com/blog/2016/09/software-architecture.htmlhtml
https://blog.csdn.net/bboyfeiyu/article/details/45136299程序员
https://www.cnblogs.com/zdxster/p/5305155.htmlweb
1. 什么是分层架构数据库
分层架构是一种很常见的架构模式,它也叫N层架构。这种架构是大多数Jave EE应用的实际标准,所以不少的架构师,设计师,还有程序员都知道它。许多传统IT公司的组织架构和分层模式十分的类似。因此它很天然的成为大多数应用的架构模式。设计模式
2. 模式分析架构
分层架构模式里的组件被分红几个平行的层次,每一层都表明了应用的一个功能(展现逻辑或者业务逻辑)。尽管分层架构没有规定自身要分红几层几种,大多数的结构都分红四个层次:展现层,业务层,持久层,和数据库层。有时候,业务层和持久层会合并成单独的一个业务层,尤为是持久层的逻辑绑定在业务层的组件当中。所以,有一些小的应用可能只有3层,一些有着更复杂的业务的大应用可能有5层或者更多的分层。jsp
分层架构中的每一层都有着特定的角色和职能。测试
举个例子,展现层负责处理全部的界面展现以及交互逻辑,业务层负责处理请求对应的业务。架构里的层次是具体工做的高度抽象,它们都是为了实现某种特定的业务请求。好比说展现层并不须要关心怎样获得用户数据,它只需在屏幕上以特定的格式展现信息。业务层并不关心要展现在屏幕上的用户数据格式,也不关心这些用户数据从哪里来。它只须要从持久层获得数据,执行与数据有关的相应业务逻辑,而后把这些信息传递给展现层。spa
分层架构的一个突出特性是组件间关注点分离 (separation of concerns)。一个层中的组件只会处理本层的逻辑。好比说,展现层的组件只会处理展现逻辑,业务层中的组件只会去处理业务逻辑。多亏了组件分离,让咱们更容易构造有效的角色和强力的模型。这样应用变的更好开发,测试,管理和维护。.net
3. 关键概念——层隔离
这是分层架构中很是重要的特色。这意味request必须一层一层的传递。举个例子,从展现层传递来的请求首先会传递到业务层,而后传递到持久层,最后才传递到数据层。
那么为何不容许展现层直接访问数据层呢。若是只是得到以及读取数据,展现层直接访问数据层,比穿过一层一层来获得数据来的快多了。这涉及到一个概念:层隔离。
层隔离就是说架构中的某一层的改变不会影响到其余层:这些变化的影响范围限于当前层次。若是展现层可以直接访问持久层了,假如持久层中的SQL变化了,这对业务层和展现层都有必定的影响。这只会让应用变得紧耦合,组件之间互相依赖。这种架构会很是的难以维护。
从另一个方面来讲,分层隔离使得层与层之间都是相互独立的,架构中的每一层的互相了解都不多。为了说明这个概念的厉害之处,想象一个超级重构,把展现层从JSP换成JSF。假设展现层和业务层的之间的联系保持一致,业务层不会受到重构的影响,它和展现层所使用的界面架构彻底独立。
然而封闭的架构层次也有不便之处,有时候也应该开放某一层。若是想往包含了一些由业务层的组件调用的普通服务组件的架构中添加一个分享服务层。在这个例子里,新建一个服务层一般是一个好主意,由于从架构上来讲,它限制了分享服务访问业务层(也不容许访问展现层)。若是没有隔离层,就没有任何架构来限制展现层访问普通服务,难以进行权限管理。
开放和封闭层的概念肯定了架构层和请求流之间的关系,而且给设计师和开发人员提供了必要的信息理解架构里各类层之间的访问限制。若是随意的开放或者封闭架构里的层,整个项目可能都是紧耦合,一团糟的。之后也难以测试,维护和部署。
4. 分层架构与MVC之间的区别
我相信不少人都会对这两个概念模糊,下面咱们来分析一下这二者之间的区别与联系。
三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目。
MVC是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。
那么架构跟设计模式有什么区别呢?
咱们从接手一个项目开始,首先,咱们须要进行架构设计,通常咱们采用的就是分层式的架构设计,即咱们的三层架构。而后,在肯定了架构之后,咱们再根据项目的具体需求去考虑是否须要应用一些设计模式,好比是否应用咱们的MVC模式,抽象工厂模式等等。最后,肯定了模式之后,就是咱们的一些具体的实现了。
其次,它俩划分的层次不一样。
三层架构将整个项目划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
MVC 即Model(模型),View(视图),Controller(控制)。
下面看一下它们的区别与联系:
而咱们一般所见到的MVC通常也都是在应用三层架构的基础上,即将Model层再进行分层。而若是Model再也不进行划分的话,那么使用MVC的意义也就不大了。
而后,它俩的目的着重点不一样。
三层架构的目的着重点是“高内聚,低耦合”,即解耦。
MVC的目的则是实现Web系统的职能分工,即职责划分。
其实职责划分也是解耦,可是三层侧重的是总体的一个解耦,而MVC侧重的是web系统的解耦,即侧重jsp和Servlet的一个解耦。
MVC和三层架构MVC与三层架构相似么?
三层架构是典型的架构模式(Architecture Pattern),三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC做为表现模式是不存在上下关系的,而是相互协做关系。即便将MVC看成架构模式,也不是分层模式。MVC和三层架构基本没有可比性,是应用于不一样领域的技术。