《架构整洁之道》
第一部分 概述
第1章 设计与架构究竟是什么
目标是什么
案例分析
第2章 两个价值维度
行为价值
架构价值
哪个价值维度更重要
艾森豪威尔矩阵
为好的软件架构而持续斗争
第二部分 从基础构件开始:编程范式
第3章 编程范式总览
结构化编程
面向对象编程
函数式编程
第4章 结构化编程
可推导性
goto是有害的
功能性降解拆分
形式化证明没有发生
科学来救场
测试
第5章 面向对象编程
封装
继承
多态
第6章 函数式编程
整数平方
不可变性与软件架构
可变性的隔离
事件溯源
第三部分 设计原则
第7章 SRP:单一职责原则
反面案例:代码合并
解决方案:门面模式(facade)
第8章 OCP:开闭原则
思想实验
依赖方向的控制
信息隐匿
第9章 LSP:里氏替换原则
继承的使用指导
正方形/长方形问题
LSP与软件架构
违反LSP的案例
第10章 ISP:接口隔离原则
ISP与编程语言
ISP与软件架构
第11章 DIP:依赖反转原则
稳定的抽象层
工厂模式
具体实现组件
第四部分 组件构建原则
第12章 组件
组件发展史
重定位技术
链接器
第13章 组件聚合
复用/发布等同原则(REP)
共同闭包原则(CCP)
共同复用原则(CRP)
组件聚合张力图
第14章 组件耦合
无依赖环原则
每周构建
消除循环依赖
循环依赖在组件依赖图中的影响
打破循环依赖
“抖动”
自上而下的设计
稳定依赖原则
稳定性
稳定性指标
并不是所有组件都应该是稳定的
抽象组件
稳定抽象原则
高阶策略应该放在哪里
稳定抽象原则简介
衡量抽象化程度
主序列
痛苦区
无用区
避开这两个区域
离主序列线的距离
第五部分 软件架构
第15章 什么是软件架构
开发(Development)
部署(Deployment)
运行(Operation)
维护(Maintenance)
保持可选项
设备无关性
垃圾邮件
物理地址寻址
第16章 独立性
用例
运行
开发
部署
保留可选项
按层解耦
用例的解耦
解耦的模式
开发的独立性
部署的独立性
重复
再谈解耦模式
第17章 划分边界
几个悲伤的故事
FitNesse
应在何时、何处画这些线
输入和输出怎么办
插件式架构
插件式架构的好处
第18章 边界剖析
跨边界调用
令人生畏的单体结构
部署层次的组件
线程
本地进程
服务
第19章 策略与层次
层次
第20章 业务逻辑
业务实体
用例
请求和响应模型
第21章 尖叫的软件架构
架构设计的主题
架构设计的核心目标
那web呢
框架是工具而不是生活信条
可测试的架构设计
第22章 整洁架构
依赖关系规则
业务实体
用例
接口适配器
框架与驱动程序
只有四层吗
跨越边界
哪些数据会跨越边界
一个常见的应用场景
第23章 展示器与谦卑对象
谦卑对象模式
展示器与视图
测试与架构
数据库网关
数据映射器
服务监听器
第24章 不完全边界
省掉最后一步
单向边界
门户模式
第25章 层次与边界
基于文本的冒险游戏:Hunt The Wumpus
可否采用整洁架构
交汇数据流
数据流的分割
第26章 Main组件
最细节化的部分
第27章 服务:宏观与微观
面向服务的架构
服务所带来的“好处”
解耦合的谬论
独立开发部署的谬论
运送猫咪的难题
对象化是救星
基于组件的服务
横跨型变更
第28章 测试边界
测试也是一种系统组件
可测试性设计
测试专用API
结构性耦合
安全性
第29章 整洁的嵌入式架构
“程序适用测试”测试
目标硬件瓶颈
整洁的嵌入式架构就是可测试的嵌入式架构
分层
硬件是实现细节
不要向HAL的用户暴露硬件细节
处理器是实现细节
操作系统是实现细节
面向接口编程与可替代性
DRY条件性编译命令
第六部分 实现细节
第30章 数据库只是实现细节
关系型数据库
为什么关系型数据库如此流行
假设磁盘不存在会怎样
实现细节
但性能怎么办你
一段轶事
第31章 Web是实现细节
无尽的摆钟
总结一下
第32章 应用程序框架是实现细节
框架作者
单向婚姻
风险
解决方案
不得不接受的依赖
第33章 案例分析:视频销售网站
产品
用例分析
组件架构
依赖关系管理
第34章 拾遗
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构