分层架构模式里的组件被分成几个平行的层次,每一层都代表了应用的一个功能(展示逻辑或者业务逻辑)。尽管分层架构没有规定自身要分成几层几种,大多数的结构都分成四个层次: 表现层,业务层,持久层,和数据库层。
如图一,有时候,业务层和持久层会合并成单独的一个业务层,尤其是持久层的逻辑绑定在业务层的组件当中形成。因此,有一些小的应用可能只有3层,一些有着更复杂的业务的大应也可能有5层或者更多的分层。
架构里的层次是具体工作的高度抽象,它们每一层都有特定的角色和职能,都是为了实现某种 特定的业务请求。比如说展示层并不需要关心怎样得到用户数据,它只需在屏幕上以特定的格 式展示信息。业务层并不关心要展示在屏幕上的用户数据格式,也不关心这些用户数据从哪里来。它只需要从持久层得到数据,执行与数据有关的相应业务逻辑,然后把这些信息传递给展 示层。各层实现的功能如下:
1.表现层(presentation):用户界面,负责视觉和用户互动
2.业务层(business):实现业务逻辑
3.持久层(persistence):提供数据,SQL 语句就放在这一层
4.数据库(database):保存数据
上面图一当中可以看到,每一层都是封闭的。这是分层架构中非常重要的特点。这意味着图二request必须要一层一层的传递。举个例子,从展示层传递来的请求首先会传递到业务层,然后传递到持久层,最后才传递到数据层。
这涉及到一个概念:层隔离。层隔离是说架构中的某一层的改变不会影响到其他层:这些变化的影响范围限于当前层次。如果展示层能够直接访问持久层了,假如持久层中的SQL变化了,这对业务层和展示层都有一定的影响。这只会让应用变得紧耦合,组件之间互相依赖。这种架构会非常的难以维护。分层隔离使得层与层之间都是相互独立的,架构中的每一层的互相了解都很少。
然而封闭的架构层次也有不便之处,有时候也应该开放某一层。如果想往包含了一些由业务层的组件调用的普通服务组件的架构中添加一个分享服务层。在这个例子里,新建一个服务层通常是一个好主意,因为从架构上来说,它限制了分享服务访问业务层(也不允许访问展示层)。如果没有隔离层,就没有任何架构来限制展示层访问普通服务,难以进行权限管理。