知识卡片
分层架构支撑扩展靠"隔离关注点",但前提是层间依赖必须稳定
内容
[[分层架构的三种划分维度:C/S-B/S、MVC-MVP、逻辑分层架构]]之所以能较好地支撑系统扩展,本质在于”隔离关注点”(separation of concerns)——每一层的组件只处理本层的逻辑,展示层只管展示逻辑、业务层只管业务逻辑,扩展某一层时其他层完全不受影响,比如Linux内核要新增一种文件系统,理论上只需要改文件存储层,其他内核层无须变动。但单纯把系统分成几层,并不天然就能实现隔离关注点、支撑快速扩展——真正的前提是层与层之间的依赖必须是稳定的。以Linux内核为例,如果没有抽象出VFS(虚拟文件系统)接口、只是简单粗暴地把ext2、ext3、reiser这些文件系统都归到”文件系统层”,那这样的分层其实达不到可扩展的目的——因为每新增一种文件系统,所有依赖文件系统能力的上层功能都要重新适配这个新文件系统的接口;而有了VFS这一层抽象之后,新增文件系统只需要让VFS去适配这个新文件系统的接口,其他基于文件系统的功能因为依赖的是稳定的VFS接口而不是具体某种文件系统,完全不受影响。这说明”分层”本身只是形式,真正决定分层能不能撑住扩展性的,是层与层之间那条依赖关系是否足够稳定——像VFS这样把”接口”本身独立成一层,对操作系统这类复杂系统是值得的;但对一个简单业务系统来说,接口可能只是Java里的几个interface定义,硬要为此单独拆出一层反而显得多余,比如经典J2EE分层架构里,如果硬要在Presentation Layer和Business Layer之间再拆一个独立的接口层,就有点画蛇添足了。
参考来源
- 位置:《从零开始学架构》第33讲《传统的可扩展架构模式:分层架构和SOA》"分层架构"(源文件:_epub-src/OEBPS/text00003.html)
- 结论依据:原文说明"分层架构之所以能够较好地支撑系统扩展,本质在于隔离关注点……并不是简单地分层就一定能够实现隔离关注点从而支撑快速扩展,分层时要保证层与层之间的依赖是稳定的,才能真正支撑快速扩展",并以Linux内核VFS为例说明有无VFS抽象层对新增文件系统的扩展成本的巨大差异,直接支撑本卡片结论。
- 原始内容:分层架构之所以能够较好地支撑系统扩展,本质在于隔离关注点(separation of concerns)……分层时要保证层与层之间的依赖是稳定的,才能真正支撑快速扩展……如果没有 VFS,只是简单地将 ext2、ext3、reiser 等文件系统划为"文件系统层",那么这个分层是达不到支撑可扩展的目的的。