关注点分离:让系统各部分各司其职
· · ·
"每个部分只做一件事,做好一件事。"
题目进度 0 / 0 ✓ 0
**预计时间:**15 分钟读 + 15 分钟做习题 = 30 分钟。
本课承诺
读完这节课,你将掌握:
① 关注点分离 (Separation of Concerns) 的精确定义(每个部分只做一件事);② 如何识别"关注点";③ 如何分离关注点。
① 关注点分离 (Separation of Concerns) 的精确定义(每个部分只做一件事);② 如何识别"关注点";③ 如何分离关注点。
一、什么是关注点分离
关注点分离 (Separation of Concerns) 是一种让系统各部分各司其职的设计原则:
关注点:系统中的一个职责或功能
分离:让每个部分只负责一个关注点
芒格式翻译
"一个部分做所有事" = 最笨的设计(混乱)。
"每个部分只做一件事" = 最聪明的设计(清晰)。
芒格说:"每个部分只做一件事,做好一件事。"
"每个部分只做一件事" = 最聪明的设计(清晰)。
芒格说:"每个部分只做一件事,做好一件事。"
二、关注点分离的常见场景
| 场景 | 关注点 | 分离方式 |
|---|---|---|
| 前端 | 用户界面 | HTML/CSS/JS 分离 |
| 后端 | 业务逻辑 | Controller/Service/Repository 分离 |
| 数据库 | 数据存储 | Schema/Query/Index 分离 |
| 测试 | 质量保证 | Unit/Integration/E2E 分离 |
| 部署 | 发布流程 | Build/Deploy/Monitor 分离 |
关注点分离的陷阱
不是所有事都需要用关注点分离!
1. 过度分离:拆得太细,失去整体视角
2. 错误分离:把不相关的关注点放在一起
3. 忽视依赖:关注点之间有依赖,但你没发现
平衡:关注点分离是"逻辑标准",不是"物理标准"。
1. 过度分离:拆得太细,失去整体视角
2. 错误分离:把不相关的关注点放在一起
3. 忽视依赖:关注点之间有依赖,但你没发现
平衡:关注点分离是"逻辑标准",不是"物理标准"。
三、2 步框架:分离关注点
第 1 步:识别关注点
先明确:系统中有哪些关注点?
案例:电商系统
关注点:用户管理 / 商品管理 / 订单管理 / 支付管理
结论:4 个关注点,每个都是独立的职责。
结论:4 个关注点,每个都是独立的职责。
案例:社交系统
关注点:用户管理 / 消息管理 / 好友管理 / 通知管理
结论:4 个关注点,每个都是独立的职责。
结论:4 个关注点,每个都是独立的职责。
第 2 步:分离关注点
让每个部分只负责一个关注点。
案例:电商系统
分离前:一个大模块处理所有业务
分离后:UserModule / ProductModule / OrderModule / PaymentModule
结论:每个模块只负责一个关注点。
分离后:UserModule / ProductModule / OrderModule / PaymentModule
结论:每个模块只负责一个关注点。
案例:社交系统
分离前:一个大模块处理所有业务
分离后:UserModule / MessageModule / FriendModule / NotificationModule
结论:每个模块只负责一个关注点。
分离后:UserModule / MessageModule / FriendModule / NotificationModule
结论:每个模块只负责一个关注点。
四、关注点分离的好处
好处 1:可维护性
修改一个关注点,不影响其他关注点
好处 2:可测试性
每个关注点可以独立测试
好处 3:可复用性
一个关注点可以在多个地方复用
芒格式翻译
"一个部分做所有事" = 最笨的设计(混乱)。
"每个部分只做一件事" = 最聪明的设计(清晰)。
芒格说:"每个部分只做一件事,做好一件事。"
"每个部分只做一件事" = 最聪明的设计(清晰)。
芒格说:"每个部分只做一件事,做好一件事。"
五、练习题
单选题
1
关注点分离的核心是?
2
"每个部分只做一件事,做好一件事"体现了?
3
分离关注点的第一步是?
4
"UserModule / ProductModule / OrderModule"属于?
5
关注点分离的陷阱不包括?
6
"修改一个关注点,不影响其他关注点"属于?
7
"每个关注点可以独立测试"属于?
8
"一个关注点可以在多个地方复用"属于?
9
关注点分离是"逻辑标准"还是"物理标准"?
10
"拆得太细,失去整体视角"属于?
案例分析
C1
C1. 案例:团队要做电商系统,用关注点分离,应该先做什么?
C2
C2. 案例:团队要做社交系统,用关注点分离,应该先做什么?
C3
C3. 案例:团队要做工具系统,用关注点分离,应该先做什么?
反事实思考题
T1
T1. 反事实:如果团队没有用关注点分离,一个部分做所有事,最可能的结果是?
T2
T2. 反事实:如果团队过度分离关注点,拆得太细,最可能的结果是?
下一步:Lesson 0010 · 高内聚低耦合——如何让系统各部分”高内聚、低耦合”。