分层体系架构模式

分层体系架构模式模式也称为多层体系架构模式。它可以用来构造可以分解为子任务组的程序,每个子任务都处于一个特定的抽象级别。每个层都为下一个提供更高层次服务。在分层架构中的组件被划分成几个层,每个层代表应用的一个功能.分层架构本身没有规定要分成多少层,大部分的应用会分成表现层,业务层,持久层和数据库层.小的应用有时候会将业务层和持久层合在一起,更大规模的应用可能会划分更多的层,比如调用外部服务的层.分层架构的一个特性就是关注分离(separation of concerns).在层中的组件只负责本层的逻辑.组件的划分很容易让它们实现自己的角色和职责,也比较容易地开发,测试管理和维护.

一般信息系统中最常见的是如下所列的4层。

  • 表示层(也称为UI层):用户界面,负责视觉与用户互动
  • 应用层(也称为服务层)
  • 业务逻辑层(也称为领域层):实现业务逻辑
  • 数据访问层(也称为持久化层):提供数据,SQL语句就放在此层

使用场景:

  • 一般的桌面应用程序
  • 电子商务Web应用程序

                        Layered pattern

关键概念

注意每一层都是封闭的.这意味着Request必须经过每一层才能到达最底下一层.


为什么不允许展示层直接访问数据库层呢,这样不是更快吗?这就是分层架构的另一个特征:层隔离(layers of isolation).
层隔离的概念意味着你对任何一层的改变都不会影响其它层,这很好理解.层隔离也意味着一个层的组件并不会了解其它层的实现,或者知道很少. 比如业务层不需知道你持久层是由hibernate还是mybatis实现的.
分层架构也很容易增加新的层. 比如你想将一些通用的服务重构成一个服务层,比如通用图片处理,远程账户审计等,可以在业务层下增加一个服务层.它不会对展示层造成影响,也不会改变持久层的代码.
上面的这个例子带来一个问题,因为每一层是封闭的,业务层不得不通过服务层访问持久层. 所以有时候可以创建一个开放的层.这意味着上一层可以绕过这一层直接访问下一层。

                       

模式分析

  • 总体灵活性: 低
  • 发布易用性:低
  • 可测试性: 高
  • 性能:低
  • 规模扩展性: 低
  • 开发容易度: 高

优点

  • 结构简单,容易理解和开发
  • 不同技能的程序员可以分工,负责不同的层,天然适合大多数软件公司的组织架构
  • 每一层都可以独立测试,其他层的接口通过模拟解决
  • 一个较低的层可以被不同的层所使用。层使标准化更容易,因为我们可以清楚地定义级别。可以在层内进行更改,而不会影响其他层
缺点
  • 一旦环境变化,需要代码调整或增加功能时,通常比较麻烦和费时
  • 部署比较麻烦,即使只修改一个小地方,往往需要整个软件重新部署,不容易做持续发布
  • 软件升级时,可能需要整个服务暂停
  • 扩展性差.用户请求大量增加时,必须依次扩展每一层,由于每一层内部是耦合的,扩展会很困难
  • 不是普通适用的。在某些情况下,某些层可能会被跳过

 

posted @ 2018-05-21 16:44  蘑菇蘑菇终于开花了  阅读(1207)  评论(0编辑  收藏  举报