知识卡片

分层架构的收益与代价

结构图卡

内容

把系统按”多层蛋糕”的方式组织——每层依托在下层之上、使用下层服务,上层对下层细节一无所知——能带来五个好处:可以在不了解其他层细节的前提下把某一层当作有机整体来理解(如无需懂以太网细节即可在TCP上构建FTP);可以替换某层的具体实现,只要前后提供的服务不变(FTP不管跑在以太网还是PPP上都无需改变);把层间依赖降到最低(物理传输系统变了,只要IP层不变,FTP就不用变);有利于标准化(TCP/IP各自都是本层如何工作的标准);一旦某层建好,可以同时支撑多个上层服务(TCP/IP同时被FTP、telnet、SSH、HTTP复用,否则每个协议都要各自重写底层)。但分层也有两个代价:层次并不能封装所有变化,给用户界面加一个数据域,往往意味着数据库、以及界面和数据库之间的每一层都要跟着改(级联修改);过多层次会因表现形式的反复转换拖累性能,不过对底层功能的封装换来的效率提升,通常大于这个转换代价(例如可以专门优化事务控制层,让其他层跟着受益)。

结构图

flowchart TB
  A["分层架构"]
  A --> B["收益"]
  B --> B1["独立理解单层"]
  B --> B2["可替换具体实现"]
  B --> B3["层间依赖最小化"]
  B --> B4["利于标准化"]
  B --> B5["一次构建服务多个上层"]
  A --> C["代价"]
  C --> C1["级联修改:加一个字段要改穿所有层"]
  C --> C2["转换开销拖累性能<br/>但底层优化收益通常更大"]

参考来源

- 位置:《企业应用架构模式》第一部分"表述"之"第1章 分层"(源文件:_epub-src/OEBPS/Text/000012.html) - 结论依据:原文用TCP/IP/FTP/以太网的分层例子逐条说明"可以将某一层作为一个有机整体来理解……可以替换某层的具体实现……可以将层次间的依赖性减到最低……分层有利于标准化工作……一旦构建好了某一层次,就可以用它为很多上层服务提供支持",随后指出"层次并不能封装所有东西……过多的层次会影响性能"两个缺陷,直接支撑本卡结构图。 - 原始内容:因此,TCP/IP同时被FTP、telnet、SSH和HTTP使用……最经典的例子就是在一个分层设计的企业应用中,如果要增加一个在用户界面上显示的数据域,就必须在数据库中增加相应的字段,还必须在用户界面和数据库之间的每一层做相应的修改。