第1章 概述 1<br>1.1 分治、知识与抽象 2<br>1.2
软件架构的三个案例 3<br>1.3 反思 5<br>1.4 视角转换
6<br>1.5 架构师构建架构 7<br>1.6 风险驱动的软件架构
8<br>1.7 敏捷开发者的架构 9<br>1.8 关于本书
10<br>第2章 软件架构 15<br>2.1 何为软件架构?
16<br>2.2 软件架构为何重要 18<br>2.3 架构何时重要?
22<br>2.4 推定架构 23<br>2.5 如何运用软件架构?
24<br>2.6 架构无关的设计 25<br>2.7 专注架构的设计
26<br>2.8 提升架构的设计 27<br>2.9 大型组织中的架构
30<br>2.10 结论 31<br>2.11 延伸阅读
32<br>第3章 风险驱动模型 35<br>3.1 风险驱动模型是什么?
37<br>3.2 你现在采用风险驱动了吗? 38<br>3.3 风险
39<br>3.4 技术 42<br>3.5 选择技术的指导原则
44<br>3.6 何时停止 47<br>3.7 计划式设计与演进式设计
48<br>3.8 软件开发过程 51<br>3.9 理解过程变化
53<br>3.10 风险驱动模型与软件开发过程 55<br>3.11 应用于敏捷过程
56<br>3.12 风险与架构重构 58<br>3.13 风险驱动模型的替代方案
58<br>3.14 结论 60<br>3.15 延伸阅读
61<br>第4章 实例:家庭媒体播放器 65<br>4.1 团队沟通
67<br>4.2 COTS组件的集成 75<br>4.3 元数据一致性
81<br>4.4 结论 86<br>第5章 建模建议
89<br>5.1 专注于风险 89<br>5.2 理解你的架构
90<br>5.3 传播架构技能 91<br>5.4 作出合理的架构决策
92<br>5.5 避免预先大量设计 93<br>5.6 避免自顶向下设计
95<br>5.7 余下的挑战 95<br>5.8 特性和风险:一个故事
97<br>第6章 工程师使用模型 103<br>6.1 规模与复杂度需要抽象
104<br>6.2 抽象提供洞察力和解决手段 105<br>6.3 分析系统质量
105<br>6.4 模型忽略细节 106<br>6.5 模型能够增强推理
107<br>6.6 提问在前,建模在后 108<br>6.7 小结
108<br>6.8 延伸阅读 109<br>第7章 软件架构的概念模型
111<br>7.1 规范化模型结构 114<br>7.2
领域模型、设计模型和代码模型 115<br>7.3 指定与细化关系
116<br>7.4 主模型的视图 118<br>7.5 组织模型的其他方式
121<br>7.6 业务建模 121<br>7.7 UML的用法
122<br>7.8 小结 123<br>7.9 延伸阅读
123<br>第8章 领域模型 127<br>8.1 领域与架构的关系
128<br>8.2 信息模型 131<br>8.3 导航和不变量
133<br>8.4 快照 134<br>8.5 功能场景
135<br>8.6 小结 136<br>8.7 延伸阅读
137<br>第9章 设计模型 139<br>9.1 设计模型
140<br>9.2 边界模型 141<br>9.3 内部模型
141<br>9.4 质量属性 142<br>9.5 Yinzer系统的设计之旅
143<br>9.6 视图类型 157<br>9.7 动态架构模型
161<br>9.8 架构描述语言 162<br>9.9 小结
163<br>9.10 深入阅读 164<br> <br>第10章
代码模型 167<br>10.1 模型-代码差异 167<br>10.2 一致性管理
171<br>10.3 架构明显的编码风格 174<br>10.4
在代码中表达设计意图 175<br>10.5 模型嵌入代码原理 177<br>10.6
表达什么 178<br>10.7 在代码中表达设计意图的模式 180<br>10.8
电子邮件处理系统预演 187<br>10.9 小结 193<br>第11章 封装和分割
195<br>11.1 多层级故事 195<br>11.2 层级和分割
197<br>11.3 分解策略 199<br>11.4 有效封装
203<br>11.5 创建封装接口 206<br>11.6 小结
210<br>11.7 深入阅读 210<br>第12章 模型元素
213<br>12.1 和部署相关的元素 214<br>12.2 组件
215<br>12.3 组件装配 219<br>12.4 连接器
223<br>12.5 设计决策 233<br>12.6 功能场景
234<br>12.7 (不变量(约束) 239<br>12.8 模块
239<br>12.9 端口 241<br>12.10 质量属性
246<br>12.11 质量属性场景 249<br>12.12 职责
251<br>12.13 权衡 252<br>12.14 小结
253<br>第13章 模型关系 255<br>13.1 投影(视图)关系
256<br>13.2 分割关系 261<br>13.3 组合关系
261<br>13.4 分类关系 261<br>13.5 泛化关系
262<br>13.6 指定关系 263<br>13.7 细化关系
264<br>13.8 绑定关系 268<br>13.9 依赖关系
269<br>13.10 使用关系 269<br>13.11 小结
270<br>13.12 深入阅读 271<br>第14章 架构风格
273<br>14.1 优势 274<br>14.2 柏拉图式风格对体验式风格
275<br>14.3 约束和以架构为中心的设计 276<br>14.4 模式对风格
277<br>14.5 风格目录 277<br>14.6 分层风格
277<br>14.7 大泥球风格 280<br>14.8 管道-过滤器风格
281<br>14.9 批量顺序处理风格 283<br>14.10 以模型为中心的风格
285<br>14.11 分发-订阅风格 286<br>14.12
客户端-服务器风格和多层 288<br>14.13 对等风格 290<br>14.14
map-reduce风格 291<br>14.15 镜像,支架和农场风格
293<br>14.16 小结 294<br>14.17 深入阅读
295<br>第15章 使用架构模型 297<br>15.1 理想的模型特性
297<br>15.2 和视图一起工作 303<br>15.3 改善视图质量
306<br>15.4 提高图的质量 310<br>15.5 测试和证明
312<br>15.6 分析架构模型 312<br>15.7 架构不匹配
318<br>15.8 选择你的抽象级别 319<br>15.9 规划用户界面
320<br>15.10 指定性模型对描述性模型 320<br>15.11
对现有系统进行建模 320<br>15.12 小结 322<br>15.13 深入阅读
323<br>第16章 结论 325<br>16.1 挑战
326<br>16.2 聚焦质量属性 330<br>16.3
解决问题,而不是仅仅对它们建模 331<br>16.4 使用导轨一样的约束
332<br>16.5 使用标准架构抽象 333<br>术语表 335<br>文献
347<br>索引 355