路线图对照复习:software-design-architecture 知识图谱
这一课你将能做到
- 把本课程 11 个课时的知识点映射到 software-design-architecture 路线图节点
- 说出本课程与 software-architect-essentials 的分工边界
- 用一张表自查:哪些节点已掌握,哪些需要补
为什么要学
路线图是"地图",课程是"导航"。本课程(software-design-architecture-essentials)覆盖设计层面:整洁代码、设计原则、OOP、范式、模式、架构原则、架构风格、架构模式、DDD、企业模式、综合练习。software-architect-essentials 覆盖架构层面:微服务、云原生、 DevOps、安全、性能。两者互补,不重复。
先建立图像
software-design-architecture 路线图
─────────────────────────────────
├─ 整洁代码(sda-clean) ← 本课程
├─ 设计原则(sda-principles) ← 本课程
├─ 面向对象(sda-oop) ← 本课程
├─ 编程范式(sda-paradigms) ← 本课程
├─ 设计模式(sda-patterns) ← 本课程
├─ 架构原则(sda-arch-principles)← 本课程
├─ 架构风格(sda-arch-styles) ← 本课程
├─ 架构模式(sda-arch-patterns) ← 本课程
├─ DDD(sda-ddd) ← 本课程
├─ 企业模式(sda-enterprise) ← 本课程
├─ 综合练习(sda-practice) ← 本课程
└─ 架构师技能 ← software-architect-essentials
├─ 微服务治理
├─ 云原生部署
├─ 性能调优
└─ 安全架构
跟着做
步骤 1:知识点映射表
| 课时 | 路线图节点 | 核心交付 | 掌握标准 |
|---|
| sda-clean | clean-code-principles | 命名、函数、注释纪律 | 能重构 80 行函数到 5 个小函数 |
| sda-principles | solid | SOLID 五条原则 | 能举出判题平台每个原则的例子 |
| sda-oop | inheritance/polymorphism | 继承、组合、多态 | 能判断一段关系该用继承还是组合 |
| sda-paradigms | functional-programming | 函数式、反应式 | 能用 Stream 写统计,用 Reactor 写回调 |
| sda-patterns | gof-design-patterns | 工厂、策略、观察者等 | 能识别判题平台用了哪些模式 |
| sda-arch-principles | coupling-and-cohesion | 高内聚低耦合 | 能用 CK 度量判断类设计 |
| sda-arch-styles | layered-architectures | 分层、六边形、CQRS | 能画出判题平台的架构图 |
| sda-arch-patterns | event-sourcing/cqrs | Saga、Outbox | 能实现 Outbox 可靠投递 |
| sda-ddd | domain-models | 实体、值对象、聚合 | 能区分实体和值对象 |
| sda-enterprise | enterprise-patterns | 事务脚本、领域模型 |
| sda-practice | architectural-patterns | C4 + ADR | 能画 C4 图、写 ADR |
步骤 2:与 software-architect-essentials 的分工
本课程(design) software-architect-essentials(architect)
───────────────── ─────────────────────────
怎么写好一个类 怎么管好一个系统
怎么组织类之间关系 怎么组织服务之间关系
怎么保证代码可维护 怎么保证系统可扩展
怎么让业务规则显式化 怎么让技术选型合理化
举例:本课程讲"用六边形架构让核心不依赖框架";architect-essentials 讲"用 Kubernetes 部署微服务"。前者是设计,后者是架构。
步骤 3:自查清单
□ 整洁代码:能说出 5 个坏味道并给出重构方案
□ SOLID:能举出判题平台每个原则的具体代码
□ OOP:能画出 Submission 聚合的类图
□ 范式:能用 Stream 重写一个 for 循环统计
□ 模式:能说出判题平台用了哪些 GoF 模式
□ 架构原则:能用 LCOM/CBO 判断一个类
□ 架构风格:能画出判题平台的 C4 L2 容器图
□ 架构模式:能实现 Saga 的补偿逻辑
□ DDD:能区分实体、值对象、聚合根
□ 企业模式:能判断"提交判题"该用事务脚本还是领域模型
□ 综合练习:能写一个"为什么选六边形"的 ADR
全部打勾 = 本课程毕业;有缺项 = 回到对应课时补课。
讲清楚要点
- 路线图是索引:每个节点对应一个课时,课时有代码和练习。
- 本课程是"设计":聚焦代码级和类级决策;architect-essentials 是"架构",聚焦系统级决策。
- 自查清单是验收标准:不是"学过",是"能用"。
- 知识是网不是线:SOLID 和 DDD 相互支撑,模式和企业模式相互补充。
- 持续复习:技术会忘,但"怎么判断"的能力会留下。定期回来自查。
你可能会懵的地方
- 学完本课程能直接做架构师吗?
不能。本课程是"设计基础",架构师还需要系统级知识(微服务、云原生、性能、安全),那是 software-architect-essentials 的内容。
- 两个课程有重叠吗?
有少量重叠(如都提到 CQRS),但视角不同:本课程讲"怎么在代码里实现 CQRS",architect-essentials 讲"什么时候该用 CQRS、用什么基础设施"。
- 学完本课程能应付面试吗?
能应付设计类面试(OOD、设计模式、DDD);架构类面试(微服务、分布式)还需要 architect-essentials。
- 怎么判断自己真的掌握了?
能给同事讲清楚,能重构一段烂代码,能写 ADR 说明为什么这样设计。说不出来 = 没掌握。
错法对照
| 错法 | 问题 | 正解 |
|---|
| 只看课不动手 | 知识是幻觉 | 每课的"跟着做"必须敲一遍 |
| 学完就扔 | 遗忘曲线 | 每月回来自查清单 |
| 混淆两个课程边界 | 学重复或学漏 | 记住:本课程管设计,architect 管架构 |
| 只背概念不写代码 | 面试露馅 | 每个知识点配一个判题平台例子 |
| 追求"学完"不追求"掌握" | 虚假进度 | 自查清单全部打勾才算完 |
卡点急救
- 某个知识点模糊:回到对应课时,重新做"跟着做"的代码练习。
- 不知道两个课程怎么选:先做本课程(设计基础),再做 architect-essentials(架构进阶)。
- 面试前快速复习:看本课的"知识点映射表"和"自查清单",针对性补漏。
面试常问
- 你学过哪些设计原则?能举例吗?
答:SOLID 五条。判题平台里,JudgeEngine 用策略模式实现 OCP;SubmissionRepository 接口实现 DIP;NotificationService 独立实现 SRP。
- DDD 在你项目里怎么落地?
答:Submission 是聚合根,JudgeResult 是值对象,用户和判题是两个限界上下文,通过 SubmissionJudged 领域事件协作。
- 你怎么保证代码质量?
答:整洁代码(命名、小函数)、SOLID(接口隔离、依赖倒置)、设计模式(策略、观察者)、DDD(聚合保护规则)、ADR(记录关键决策)。
自测三问
- 本课程和 software-architect-essentials 的分工边界是什么?
- 用一句话概括本课程 11 个课时的核心交付。
- 如果只能保留 3 个知识点,你保留哪 3 个?为什么?
小结一句话
路线图是地图,课程是导航,自查清单是验收;掌握不是"学过",是"能讲、能用、能重构"。
延伸