文章目录
为什么复杂的架构一定要做分层设计?一、什么是分层设计?1.1 分层设计的定义1.2 三层架构
二、分层架构的典型案例2.1 OSI 网络模型2.2 Linux 文件系统
三、分层架构的优势3.1 简化设计与开发3.2 提高复用性3.3 支持高并发的扩展
四、如何设计分层架构?4.1 明确层次边界示例问题
4.2 更细致的分层
五、分层架构的不足5.1 增加复杂度5.2 性能损耗
为什么复杂的架构一定要做分层设计?
软件架构中的分层设计,是一种经典的设计模式。通过将系统划分为多个独立职责的层次,分层设计能够更好地实现模块化、简化开发、提升复用性和可维护性。本文将从基本概念、分层架构的好处、实践要点及其不足展开讨论,帮助你全面理解分层设计的重要性。
一、什么是分层设计?
1.1 分层设计的定义
分层设计是将系统拆分为多个层级,各层负责不同的职责。最经典的例子莫过于 MVC(Model-View-Controller)架构:
Model:负责业务逻辑和数据存储。View:用于展示数据和接收用户交互。Controller:连接用户请求与业务逻辑。
图1:MVC架构示意图
1.2 三层架构
另一种常见的分层方式是“三层架构”:
表现层:展示数据并与用户交互。逻辑层:负责业务逻辑的处理。数据访问层:与数据库交互。
图2:三层架构示意图
二、分层架构的典型案例
2.1 OSI 网络模型
OSI 模型将网络通信分为七层,从底层的 物理层 到顶层的 应用层,每层实现特定功能,层与层之间通过接口交互。
图3:OSI 网络模型
2.2 Linux 文件系统
Linux 文件系统分层结构清晰:最上层的 VFS(虚拟文件系统) 提供统一接口,对下层 Ext3/Ext4 文件系统 和 通用块设备层 屏蔽细节,简化了扩展和维护。
图4:Linux 文件系统分层示意图
三、分层架构的优势
3.1 简化设计与开发
通过分层,开发者可以专注于某一层的实现,无需关心其他层的细节。例如,在网络程序开发中,应用层的开发者只需专注于业务逻辑,而无需了解底层的传输协议。
3.2 提高复用性
通用的逻辑可以抽取为独立模块,在不同系统间复用。例如,将支付服务独立为一个模块后,多个系统可以共享使用。
3.3 支持高并发的扩展
分层架构让横向扩展更加灵活。例如,当逻辑层成为性能瓶颈时,可以单独扩展逻辑层,而无需对整个系统进行扩容。
四、如何设计分层架构?
4.1 明确层次边界
分层的关键在于理清每一层的职责边界。业务简单时,边界清晰;但随着需求复杂化,边界容易变模糊。
示例问题
假设有一个用户系统,原始逻辑如下:
表现层:调用逻辑层的 GetUser 方法。逻辑层:处理用户数据,调用 数据访问层 与数据库交互。
当新增需求要求用户不存在时自动创建用户,而 HTML5 页面不需要这一逻辑,表现层的职责开始变得混乱。
图5:复杂业务导致边界模糊
4.2 更细致的分层
为了解决边界模糊的问题,可以参考 阿里巴巴 Java 开发手册 中的分层设计,将传统三层架构细化为以下六层:
终端显示层:处理页面渲染。开放接口层:提供 API,并进行安全与流量控制。Web 层:处理请求路由和简单逻辑。Service 层:编排业务逻辑。Manager 层:封装通用业务逻辑和中间件调用。DAO 层:负责数据存储和访问。
图6:阿里分层架构示意图
五、分层架构的不足
5.1 增加复杂度
分层增加了系统的代码量和开发成本。例如,一个简单的需求可能需要在多层实现,调试和维护也变得更加困难。
5.2 性能损耗
如果层与层之间通过网络交互,会产生“多一跳”性能损耗。但这种性能损失在现代硬件和优化手段的支持下通常可以接受。