来源书籍
架构整洁之道
软件设计与复杂性管理类
类别清单覆盖
尚未完成类别清单核对。
全书概览
架构整洁之道
类别:软件设计与复杂性管理类
Skill 版本:v7
四象限结论:经典原理(高信息浓度 + 高稳定性)
理由:精读第一章”设计与架构究竟是什么”确认:全书开篇即用真实公司团队规模扩张但生产力 持续下滑(每行代码变更成本8个版本内暴涨40倍)的案例,论证”软件架构的终极目标是用最小人力 成本满足构建和维护系统的需求”这一核心命题,随后用类比与实验数据(TDD 6天实验:稳扎稳打反而 更快)层层展开为什么”过度自信、延迟治理代码质量”必然导致系统退化——这是纯粹讲”为什么”的 论证而非讲某个工具”怎么用”的操作手册。信息浓度极高。稳定性方面,全书虽然援引Java/C++等语言 特性和具体框架(Web框架、数据库驱动)作为例证,但这些始终是用来讲解SOLID原则、组件聚合与 耦合、依赖方向、架构边界这些跨语言跨技术栈长期成立的设计原则的载体——”高层策略应独立于低层 实现细节”这类结论不会因为某个框架或数据库产品的迭代而过时。综合定级:高信息浓度+高稳定性= 经典原理。
类别说明:核对category-checklists.md中”系统架构类”(判定标准:”以讲解大型软件系统
整体架构设计(微服务、分层架构等,不针对单一具体框架)为主要目标的书籍”,必答清单聚焦服务
拆分、跨服务通信、跨服务一致性、可观测性、熔断降级、部署发布策略)——本书主线是单一代码库
内部的组件边界、依赖方向、SOLID原则与实现细节隔离,并非围绕微服务/分布式系统的服务拆分与
跨服务治理展开,与该类别必答清单逐条对不上。检索全书章节标题与目录,也未发现契合”编程语言
类”“框架类”“领域建模类”“数据库/存储引擎类”“分布式系统类”“可观测性/监控类”“工程管理/团队
协作类”等其他已定义类别判定标准的主线内容。本书主题(面向对象架构设计原则)足够通用、后续
可能有同类书籍复用,但因当前处于无人值守自动化流程中,无法与用户交互确认是否新增类别,故
暂不记录类别字段,阶段五按规则跳过;待后续人工复核时,可考虑提议新增”面向对象架构设计类”
类别(必答清单草案:SRP/OCP/LSP/ISP/DIP五原则的应用边界、组件聚合与耦合的度量、依赖方向与
架构边界划分、”细节可替换”的判定标准、整洁架构的同心圆分层)。
章节筛选
前言/推荐序/引言/后记/附录A(架构设计考古,回顾历史与个人经历)不进入卡片生成。正文1-34章 构成全书主干,从设计目标、编程范式、SOLID原则、组件原则到架构边界与实现细节隔离,信息浓度 普遍很高,全部标记精读候选;实际处理时按浓度和跨章重叠动态过滤纯罗列性内容。
| 章节号 | 章节标题 | 精读/略读 | 状态 | 卡片数 |
|---|---|---|---|---|
| 01 | 设计与架构究竟是什么 | 精读 | done | 3 |
| 02 | 两个价值维度 | 精读 | done | 3 |
| 03 | 编程范式总览 | 精读 | done | 1 |
| 04 | 结构化编程 | 精读 | done | 2 |
| 05 | 面向对象编程 | 精读 | done | 3 |
| 06 | 函数式编程 | 精读 | done | 2 |
| 07 | SRP:单一职责原则 | 精读 | done | 2 |
| 08 | OCP:开闭原则 | 精读 | done | 2 |
| 09 | LSP:里氏替换原则 | 精读 | done | 2 |
| 10 | ISP:接口隔离原则 | 精读 | done | 2 |
| 11 | DIP:依赖反转原则 | 精读 | done | 2 |
| 12 | 组件 | 精读 | done | 2 |
| 13 | 组件聚合 | 精读 | done | 4 |
| 14 | 组件耦合 | 精读 | done | 5 |
| 15 | 什么是软件架构 | 精读 | done | 4 |
| 16 | 独立性 | 精读 | done | 4 |
| 17 | 划分边界 | 精读 | done | 5 |
| 18 | 边界剖析 | 精读 | done | 2 |
| 19 | 策略与层次 | 精读 | done | 2 |
| 20 | 业务逻辑 | 精读 | done | 3 |
| 21 | 尖叫的软件架构 | 精读 | done | 2 |
| 22 | 整洁架构 | 精读 | done | 4 |
| 23 | 展示器和谦卑对象 | 精读 | done | 2 |
| 24 | 不完全边界 | 精读 | done | 2 |
| 25 | 层次与边界 | 精读 | done | 3 |
| 26 | Main组件 | 精读 | done | 1 |
| 27 | 服务:宏观与微观 | 精读 | done | 3 |
| 28 | 测试边界 | 精读 | done | 2 |
| 29 | 整洁的嵌入式架构 | 精读 | done | 6 |
| 30 | 数据库只是实现细节 | 精读 | done | 3 |
| 31 | Web是实现细节 | 精读 | done | 2 |
| 32 | 应用程序框架是实现细节 | 精读 | done | 2 |
| 33 | 案例分析:视频销售网站 | 精读 | done | 2 |
| 34 | 拾遗 | 精读 | done | 6 |
实践卡进度
| 序号 | 实践标题 | 实践方式 | 状态(pending/done) | 关联章节 | 产出 |
|---|---|---|---|---|---|
| idea-001 | go-clean-arch源码深读:映射书中依赖规则与四层结构 | 实现深读 | done | 第11/20/22/26章 | 阅读单元对照表+包依赖方向图规划 |
| idea-002 | 审计cardbox自身代码库的依赖方向是否符合依赖规则 | 证据验证 | done | 第14/17/30/34章 | 真实包依赖图+审计表规划 |
| idea-003 | 整洁架构、六边形架构、洋葱架构:三种同源架构的横向比较 | 横向学习 | done | 第22/34章 | 五维度对照表规划 |
待关联术语
| 术语名 | 出现章节 | 一句话语境 |
|---|
引用文献
| 标题 | 类型 | 出现章节 | 一句话语境 |
|---|
资金安全问题案例
| 问题标题 | 问题卡 | 解决方案卡(如有) | 出现章节 | 一句话说明 |
|---|
章节与卡片
01 设计与架构究竟是什么
- 设计架构同体 普通读书笔记卡
- 设计与架构本质上没有区别,只是同一连续体的不同层级 普通读书笔记卡
- 软件架构的终极目标是用最小人力成本满足系统全生命周期需求 普通读书笔记卡
- 过度自信是乱麻系统的根源,要跑得快先要跑得稳 普通读书笔记卡
02 两个价值维度
- 双重价值 普通读书笔记卡
- 软件的两个价值维度:行为价值与架构价值 普通读书笔记卡
- 用逻辑论证证明架构价值高于行为价值的反直觉结论 普通读书笔记卡
- 艾森豪威尔矩阵下,为好架构持续斗争是研发人员的职责 普通读书笔记卡
03 编程范式总览
- 范式是约束 普通读书笔记卡
- 三大编程范式的共性:各自移除一种编程能力,而非增加 结构图卡
04 结构化编程
- 测试只能证伪 普通读书笔记卡
- 结构化编程诞生于可推导性追求,goto有害的真正原因 普通读书笔记卡
- 结构化编程真正的价值是创造可证伪的程序单元 普通读书笔记卡
05 面向对象编程
- 多态反转依赖 普通读书笔记卡
- 封装与继承并非面向对象编程独有的能力 普通读书笔记卡
- 多态本质是函数指针的安全化,催生了插件式架构 普通读书笔记卡
- 依赖反转:面向对象编程对架构师的核心本质 结构图卡
06 函数式编程
- 不可变削弱并发 普通读书笔记卡
- 不可变性是并发问题的根治方案,与可变性隔离策略 普通读书笔记卡
- 事件溯源:用存储换不可变性,只存事务不存状态 普通读书笔记卡
07 SRP:单一职责原则
- 职责来自角色 普通读书笔记卡
- SRP的真正含义是"只对一类行为者负责",而非"只做一件事" 普通读书笔记卡
- 拆分不同行为者依赖的代码,及SRP在组件与架构层面的映射 普通读书笔记卡
08 OCP:开闭原则
- 扩展优先修改 普通读书笔记卡
- OCP在架构层面的核心机制:不想被修改影响的组件应被依赖 结构图卡
- 接口的信息隐藏作用:防止传递性依赖,而非只是反转方向 普通读书笔记卡
09 LSP:里氏替换原则
- 替换保护契约 普通读书笔记卡
- LSP的可替换性定义与正方形/长方形问题 普通读书笔记卡
- LSP扩展到架构层面:用配置驱动隔离不可替换的接口实现 普通读书笔记卡
10 ISP:接口隔离原则
- 接口按用户切 普通读书笔记卡
- ISP的源码级成因:接口隔离消除不必要的重新编译部署 普通读书笔记卡
- ISP在架构层面:依赖不需要的东西在任何层次都有害 普通读书笔记卡
11 DIP:依赖反转原则
- 依赖指向抽象 普通读书笔记卡
- DIP真正该关注的是易变具体实现,及稳定抽象层的四条编码守则 普通读书笔记卡
- 抽象工厂模式与依赖反转名字的由来:控制流与源码依赖方向相反 结构图卡
12 组件
- 组件部署单元 普通读书笔记卡
- 组件是软件的最小独立部署单元 普通读书笔记卡
- 插件式架构是"程序规模墨菲定律"与摩尔定律较量的历史产物 普通读书笔记卡
13 组件聚合
- 聚合原则拉扯 普通读书笔记卡
- REP复用/发布等同原则:软件复用的最小粒度应等同发布粒度 普通读书笔记卡
- CCP共同闭包原则是SRP在组件层面的再度阐述 普通读书笔记卡
- CRP共同复用原则的真正重点是"不该放在一起"的类 普通读书笔记卡
- 组件聚合张力图:三原则的竞争关系与随项目成熟度的动态平衡 结构图卡
14 组件耦合
- 依赖环阻塞发布 普通读书笔记卡
- ADP无依赖环原则:从"一觉醒来综合征"到组件化发布 结构图卡
- 循环依赖的连锁代价与两种打破方式 普通读书笔记卡
- SDP稳定依赖原则:稳定性的量化定义与Fan-in/Fan-out指标 普通读书笔记卡
- SAP稳定抽象原则:稳定性应与抽象化程度一致,等于组件层面的DIP 普通读书笔记卡
- 主序列与I/A图:用痛苦区、无用区和D指标量化组件设计质量 结构图卡
15 什么是软件架构
- 架构保留选择 普通读书笔记卡
- 软件架构师应是一线程序员,架构工作的实质是规划组件切分与通信 普通读书笔记卡
- 架构对开发、部署、运行、维护四阶段的影响程度并不均等 普通读书笔记卡
- 保持可选项:策略与细节脱钩,让实现决策尽可能推迟 普通读书笔记卡
- 设备无关性与物理地址无关性:两个历史案例印证策略细节脱钩的真实收益 普通读书笔记卡
16 独立性
- 独立性服务用例 普通读书笔记卡
- 良好架构须支持用例、运行、开发、部署四大目标,及保留可选项的必要性 普通读书笔记卡
- 按层水平解耦与按用例垂直切分的矩阵式解耦模式 结构图卡
- 表面重复与真正重复:不该为了消除相似而过早耦合独立演化的代码 普通读书笔记卡
- 三种解耦粒度,与为何"默认微服务优先"是代价高昂的选择 普通读书笔记卡
17 划分边界
- 边界越早越值钱 普通读书笔记卡
- 边界的作用是推迟不成熟决策,最耗人力的是过早决策导致的耦合 普通读书笔记卡
- P公司与W公司的悲伤故事:草率架构决策的真实代价 普通读书笔记卡
- FitNesse案例:通过划边界层层推迟数据库决策的真实历程 普通读书笔记卡
- 数据库是业务逻辑间接使用的工具,边界线应画在依赖箭头指向业务逻辑之处 结构图卡
- I/O无关紧要原则与插件式架构:构建变更防火墙 普通读书笔记卡
18 边界剖析
- 边界跨越靠插件 普通读书笔记卡
- 跨边界调用的两种依赖方向:低层调高层对齐,高层调低层需反转 结构图卡
- 四种边界物理形式的通信成本呈阶梯递增 普通读书笔记卡
19 策略与层次
- 高层策略少变 普通读书笔记卡
- 层次按"距离输入输出的远近"定义,高层策略变更应更少更重大 普通读书笔记卡
- 加密程序案例:源码依赖方向应与数据流向脱钩,让低层成为高层的插件 结构图卡
20 业务逻辑
- 业务规则分层 普通读书笔记卡
- 业务实体:把关键业务逻辑与关键业务数据绑定为独立模块 普通读书笔记卡
- 用例:只在自动化系统内才有意义,控制业务实体交互是DIP的又一应用 普通读书笔记卡
- 请求/响应模型:为何用例输入输出必须独立于框架与业务实体 普通读书笔记卡
21 尖叫的软件架构
- 架构应喊业务 普通读书笔记卡
- 尖叫的架构:目录结构该"喊"出用例,而非框架名字 普通读书笔记卡
- 框架是工具而非信条,围绕用例的架构才能脱离框架测试 普通读书笔记卡
22 整洁架构
- 依赖只向内 普通读书笔记卡
- 整洁架构:综合多种架构思想的五个共同特征与依赖关系规则 结构图卡
- 整洁架构四层的具体职责:业务实体、用例、接口适配器、框架驱动 普通读书笔记卡
- 跨越架构边界:用"输出端"接口反转控制流与源码依赖的方向 结构图卡
- 一个基于Web/数据库的Java系统案例:完整走通整洁架构数据流 结构图卡
23 展示器和谦卑对象
- 谦卑对象隔离难测 普通读书笔记卡
- 谦卑对象模式:展示器可测试,与视图谦卑的分工 普通读书笔记卡
- 谦卑对象模式在数据库网关、ORM与服务边界的应用 普通读书笔记卡
24 不完全边界
- 不完全边界 普通读书笔记卡
- 不完全边界"省掉最后一步"策略,及FitNesse的成功兼反例 普通读书笔记卡
- 单向边界(策略模式)与门户模式:两种更简化的不完全边界 普通读书笔记卡
25 层次与边界
- 边界不止三层 普通读书笔记卡
- Hunt The Wumpus案例:从三组件模型到多API边界,GameRules成为最高层策略 结构图卡
- 数据流会随系统复杂化持续分裂,高低层策略的拆分要视场景而定 普通读书笔记卡
- 架构边界可存在于任何地方,决策不是一次性的而是持续观察演进的成本权衡 普通读书笔记卡
26 Main组件
- Main最细节 普通读书笔记卡
- Main组件是系统最细节化的部分,也可被视为一种插件 普通读书笔记卡
27 服务:宏观与微观
- 服务不是架构 普通读书笔记卡
- 服务本身不等于架构:解耦合与独立部署的两个流行谬论 普通读书笔记卡
- 运送猫咪的难题:横跨型变更让按功能切分的微服务全体强耦合 普通读书笔记卡
- 服务边界不是架构边界,SOLID组件设计才能真正化解横跨型变更 结构图卡
28 测试边界
- 测试也是组件 普通读书笔记卡
- 测试是系统架构最外圈的组件,脆弱测试问题会让系统变死板 普通读书笔记卡
- 测试专用API解决结构性耦合,让产品代码与测试代码独立演进 普通读书笔记卡
29 整洁的嵌入式架构
- 嵌入式也要分层 普通读书笔记卡
- 固件的重新定义:由依赖关系与变更难度界定,而非存储位置 普通读书笔记卡
- "程序适用测试"的局限:只关注让代码工作,会让代码通过运行测试却毫无长久价值 普通读书笔记卡
- 硬件抽象层(HAL):让硬件成为实现细节,可以无限分层 普通读书笔记卡
- 处理器是实现细节:用标准stdint.h取代厂商专有扩展,并靠PAL隔离寄存器访问 普通读书笔记卡
- 操作系统抽象层(OSAL)让软件脱离目标操作系统,迁移RTOS的痛苦对比 普通读书笔记卡
- 面向接口的可替代性,与DRY条件编译反例:用HAL接口取代满天飞的#ifdef 普通读书笔记卡
30 数据库只是实现细节
- 数据库是细节 普通读书笔记卡
- 数据库只是实现细节:区分重要的数据模型与不重要的数据库工具 普通读书笔记卡
- 数据库与文件系统是应对磁盘慢速限制的产物,假设磁盘不存在会怎样 普通读书笔记卡
- 一段轶事:市场需求驱动关系型数据库引入的真实故事 普通读书笔记卡
31 Web是实现细节
- Web是输入输出 普通读书笔记卡
- 无尽的钟摆:Web只是计算资源集中/分散振荡史的一瞬 普通读书笔记卡
- GUI与Web只是实现细节,靠用例的完整输入输出数据结构实现设备无关抽象 普通读书笔记卡
32 应用程序框架是实现细节
- 框架须可替换 普通读书笔记卡
- 框架作者与用户的"单向婚姻",及四项具体风险 普通读书笔记卡
- 不要嫁给框架:用代理类隔离依赖,并对不可避免的依赖保持主动选择 普通读书笔记卡
33 案例分析:视频销售网站
- 用例先于技术 普通读书笔记卡
- 视频网站案例:四个角色驱动的用例分析与抽象用例 普通读书笔记卡
- 组件架构中控制流方向与依赖方向的分离,及灵活部署选项 结构图卡
34 拾遗
- 组件按业务封装 普通读书笔记卡
- 按层封装与按功能封装的对比:水平分层无法体现业务领域信息 普通读书笔记卡
- 端口和适配器:区分领域与基础设施代码,并用独特领域语言命名 普通读书笔记卡
- 按组件封装:Simon Brown的组件定义与Bob大叔的组件定义之别 普通读书笔记卡
- 宽松分层架构的陷阱:漂亮的依赖图很容易被"自律"以外的手段突破 普通读书笔记卡
- public滥用会让四种架构风格实质等同,用访问修饰符让编译器强制执行架构规则 普通读书笔记卡
- 其他解耦合模式:模块系统、多代码树拆分与Périphérique反模式 普通读书笔记卡
相关主题
暂无公开主题。