作者 |
李智慧 李必信 廖力 王璐璐 孔祥龙 周颖 |
丛书名 |
架构师书库 |
出版社 |
机械工业出版社 |
ISBN |
9782104201548 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------8079921 - 架构师的自我修炼:技术、架构和未来--------------------------- 本书共38章,分四个部分。 第 一部分是架构师的基础知识修炼。软件的基础知识原理主要是操作系统、数据结构、数据库原理等,书中会从常见的问题入手,直达这些基础技术本质的原理,并覆盖这些基础技术的关键技术点,帮助读者理解这些基础技术原理和日常开发工作的关联关系,对这些基础技术有一个全新的认知。 第二部分是架构师的程序设计修炼。讲述如何设计一个强大灵活、易复用、易维护的软件,在这个过程中,应该依赖哪些工具和方法,遵循哪些原则和思想,使用哪些模式和手段。 第三部分是架构师的架构方法修炼。围绕目前主要的互联网分布式架构以及大数据、物联网架构分析这些架构背后的原理,详解它们都遵循了怎样的驱动力和设计思想,以及如何通过这些技术实现系统的高可用和高性能。 第四部分是架构师的思维修炼。软件开发是一个实践性很强的活动,如果只是学习技术,那就是在纸上谈兵。只有将知识技能应用到工作实践中,才能真正体会到技术的关键点在哪里。如何在工作中处理好各种关系,得到充分的授权和信任,在工作中实践自己的技术思想,并为公司创造更多的价值,使自己的技术成长和职业发展进入互相促进的正向通道,也是架构师需要修炼与提升的。 ---------------------------8057273 - 软件架构理论与实践--------------------------- 本书是一本全面介绍SA的书,从SA发展历史的过去、现在到可能的未来,从SA的基础理论方法到技术手段,从SA的设计开发实践到质量保障实践,以及从静态SA到动态SA、再到运行态SA,等等。涵盖了SA涉及到的几乎所有必要的知识点。本书包括三个篇章:其中,基础理论篇包含7章内容,详细介绍SA的基础理论方法、技术和手段;工程实践篇包含10章内容,详细介绍SA的开发实践和质量保障实践;未来主题篇包含6章内容,详细介绍SA的最新研究主题、最新业界关注点以及SA未来发展趋势分析等。 |
目录 |
[套装书具体书目] 8057273 - 软件架构理论与实践 - 9787111620709 - 机械工业出版社 - 定价 99 8079921 - 架构师的自我修炼:技术、架构和未来 - 9787111679363 - 机械工业出版社 - 定价 89 ---------------------------8079921 - 架构师的自我修炼:技术、架构和未来--------------------------- 前言 第一部分 架构师的基础知识修炼 第1章 操作系统原理:程序是如何运行和崩溃的 2 1.1 程序是如何运行起来的 2 1.2 一台计算机如何同时处理数以百计的任务 4 1.3 系统为什么会变慢,为什么会崩溃 5 1.4 小结 7 第2章 数据结构原理:Hash表的时间复杂度为什么是O(1) 8 2.1 数组的结构 8 2.2 链表的结构 9 2.3 Hash表的结构 10 2.4 栈的结构 12 2.5 队列的结构 13 2.6 树的结构 14 2.7 小结 14 第3章 Java虚拟机原理:JVM为什么被称为机器 16 3.1 JVM的构造 17 3.2 JVM的垃圾回收 19 3.3 Web应用程序在JVM中的执行过程 22 3.4 小结 24 第4章 网络编程原理:一个字符的互联网之旅 25 4.1 DNS域名解析原理 26 4.2 CDN 27 4.3 HTTP的结构 28 4.4 TCP的结构 29 4.5 链路层负载均衡原理 32 4.6 小结 33 第5章 文件系统原理:用1分钟遍历一个100TB的文件 34 5.1 硬盘结构原理 35 5.2 文件系统原理 36 5.3 RAID硬盘阵列原理 37 5.4 分布式文件系统架构原理 39 5.5 小结 40 第6章 数据库原理:SQL为什么要预编译 42 6.1 数据库架构与SQL执行过程 43 6.2 使用PrepareStatement执行SQL的好处 45 6.3 数据库文件存储与索引工作原理 46 6.4 小结 48 第7章 编程语言原理:面向对象编程是编程的终极形态吗 49 7.1 软件编程的远古时代 49 7.2 机器与汇编语言时代 51 7.3 高级编程语言时代 51 7.4 面向对象编程时代 52 7.5 编程语言的未来 53 7.6 小结 54 第二部分 架构师的程序设计修炼 第8章 软件设计的方法论:软件为什么要建模 56 8.1 什么是软件建模 57 8.2 4+1视图模型 58 8.3 UML建模 59 8.4 小结 60 第9章 软件设计实践:使用UML完成一个设计文档 61 9.1 用类图设计对象模型 61 9.2 用序列图描述系统调用 62 9.3 用组件图进行模块设计 63 9.4 用部署图描述系统物理架构 64 9.5 使用用例图进行需求分析 65 9.6 用状态图描述对象状态变迁 66 9.7 用活动图描述调用流程 66 9.8 使用合适的UML模型构建一个软件设计文档 67 9.9 软件架构设计文档示例模板 68 9.10 小结 74 第10章 软件设计的目的:糟糕的程序差在哪里 75 10.1 糟糕的设计有多糟糕 76 10.2 一个设计“腐坏”的例子 77 10.3 解决之道 78 10.4 小结 80 第11章 软件设计的开闭原则:不修改代码却能实现需求变更 81 11.1 什么是开闭原则 81 11.2 一个违反开闭原则的例子 82 11.3 使用策略模式实现开闭原则 84 11.4 使用适配器模式实现开闭原则 85 11.5 使用观察者模式实现开闭原则 86 11.6 使用模板方法模式实现开闭原则 88 11.7 小结 89 第12章 软件设计的依赖倒置原则:不依赖代码却可以复用它的功能 91 12.1 依赖倒置原则 91 12.2 依赖倒置的关键是接口所有权的倒置 93 12.3 使用依赖倒置来实现高层模块复用 94 12.4 小结 96 第13章 软件设计的里氏替换原则:正方形可以继承长方形吗 97 13.1 里氏替换原则 98 13.2 一个违反里氏替换原则的例子 99 13.3 正方形可以继承长方形吗 100 13.4 子类不能比父类更严格 101 13.5 小结 102 第14章 软件设计的单一职责原则:一个类文件打开后最好不要超过一屏 104 14.1 单一职责原则 107 14.2 一个违反单一职责原则的例子 107 14.3 从Web应用架构演进看单一职责原则 108 14.4 小结 110 第15章 软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法 112 15.1 接口隔离原则 113 15.2 一个使用接口隔离原则优化的例子 114 15.3 接口隔离原则在迭代器设计模式中的应用 117 15.4 小结 117 第16章 设计模式基础:不会灵活应用设计模式,就没有掌握面向对象编程 119 16.1 面向对象编程的本质是多态 119 16.2 设计模式的精髓是对多态的使用 121 16.3 小结 123 第17章 设计模式应用:编程框架中的设计模式 125 17.1 什么是框架 125 17.2 Web容器中的设计模式 127 17.3 JUnit中的设计模式 129 17.4 小结 132 第18章 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应 133 18.1 反应式编程 135 18.2 反应式编程框架Flower的基本原理 135 18.3 反应式编程框架Flower的设计方法 138 18.4 反应式编程框架Flower的落地效果 140 18.5 小结 141 第19章 组件设计原则:组件的边界在哪里 143 19.1 组件内聚原则 144 19.2 组件耦合原则 145 19.3 小结 147 第20章 领域驱动设计:35岁的程序员应该写什么样的代码 148 20.1 领域模型模式 149 20.2 领域驱动设计 151 20.3 小结 154 第三部分 架构师的架构方法修炼 第21章 分布式架构:如何应对高并发的用户请求 156 21.1 垂直伸缩与水平伸缩 157 21.2 互联网分布式架构演化 157 21.3 小结 163 第22章 缓存架构:减少不必要的计算 165 22.1 通读缓存 166 22.2 旁路缓存 168 22.3 缓存注意事项 171 22.4 小结 173 第23章 异步架构:避免互相依赖的系统间耦合 174 23.1 使用消息队列实现异步架构 175 23.2 消息队列异步架构的好处 178 23.3 小结 180 第24章 负载均衡架构:用10行代码实现一个负载均衡服务 181 24.1 HTTP重定向负载均衡 181 24.2 DNS负载均衡 183 24.3 反向代理负载均衡 184 24.4 IP负载均衡 184 24.5 数据链路层负载均衡 186 24.6 小结 187 第25章 数据存储架构:改善系统的数据存储能力 188 25.1 数据库主从复制 188 25.2 数据库分片 190 25.3 关系数据库的混合部署 193 25.4 NoSQL数据库 196 25.5 小结 197 第26章 搜索引擎架构:瞬间完成海量数据检索 199 26.1 搜索引擎倒排索引 199 26.2 搜索引擎结果排序 202 26.3 小结 205 第27章 微服务架构:微服务究竟是“灵丹”还是“毒药” 206 27.1 单体架构的困难和挑战 206 27.2 微服务框架原理 208 27.3 微服务架构的落地实践 210 27.4 小结 211 第28章 高性能架构:除了代码,还可以在哪些地方优化性能 212 28.1 性能指标 212 28.2 性能测试 213 28.3 性能优化 215 28.4 小结 219 第29章 高可用架构:淘宝应用升级时,为什么没有停机 220 29.1 高可用的度量 221 29.2 高可用的架构 222 29.3 小结 225 第30章 安全性架构:为什么说用户密码泄露是程序员的问题 227 30.1 数据加密与解密 227 30.2 HTTP攻击与防护 230 30.3 小结 233 第31章 大数据架构:思想和原理 234 31.1 HDFS分布式文件存储架构 235 31.2 MapReduce大数据计算架构 236 31.3 Hive大数据仓库架构 238 31.4 Spark快速大数据计算架构 240 31.5 大数据流计算架构 242 31.6 小结 242 第32章 AI与物联网架构:从智能引擎到物联网平台 243 32.1 大数据平台架构 244 32.2 智能推荐算法 245 32.3 物联网大数据架构 249 32.4 小结 250 第33章 区块链技术架构:区块链到底能做什么 251 33.1 比特币与区块链原理 251 33.2 联盟链与区块链的企业级应用 255 33.3 小结 257 第四部分 架构师的思维修炼 第34章 技术修炼之道:同样工作十几年,为什么有的人成为资深架构师,有的人失业 260 34.1 德雷福斯模型 261 34.2 如何在工作中成长 263 34.3 小结 264 第35章 技术进阶之道:你和世界上顶级的程序员差几个等级 265 35.1 软件技术的生态江湖与等级体系 265 35.2 技术进阶之捷径 267 35.3 小结 269 第36章 技术落地之道:你真的知道自己要解决的问题是什么吗 270 36.1 确定会议真正要解决的问题是什么 271 36.2 不需要去解决别人的问题,提醒他问题的存在即可 272 36.3 去解决那些被人们习以为常而忽略了的问题 273 36.4 小结 273 第37章 技术沟通之道:如何解决问题 275 37.1 让有能力解决问题的人感受到问题的存在 275 37.2 “直言有讳” 276 37.3 想解决一个大家都不关注的问题,可以等问题变得更糟 277 37.4 如果不填老师想要的答案,你就得不了分 278 37.5 小结 278 第38章 技术管理之道:真的要转管理吗 280 38.1 彼得定律 281 38.2 用目标驱动 282 38.3 小结 283 附录A 软件开发技术的第一性原理 284 附录B 我的架构师成长之路 287 附录C 无处不在的架构之美 293 附录D 软件架构师之道 298 ---------------------------8057273 - 软件架构理论与实践--------------------------- 前言 教学建议 上篇 基础理论篇 第1章 软件架构概述 …… 2 1.1 软件架构产生的背景 …… 2 1.2 软件架构的主要思想和特征 …… 3 1.2.1 软件架构的主要思想 …… 3 1.2.2 软件架构的特征 …… 3 1.3 软件架构的发展阶段 …… 4 1.3.1 基础研究阶段(1968—1994) …… 4 1.3.2 概念体系和核心技术形成阶段(1991—2000) …… 6 1.3.3 理论体系完善与发展阶段(1996年至今) …… 7 1.3.4 普及应用阶段(1999年至今) …… 7 1.4 软件架构研究和应用现状 …… 7 1.4.1 软件架构理论和方法研究 …… 8 1.4.2 软件架构的应用研究 …… 11 1.5 本章小结 …… 13 思考题 …… 13 参考文献 …… 14 第2章 软件架构的概念 …… 17 2.1 引言 …… 17 2.2 组成派的主要定义 …… 18 2.3 决策派的主要定义 …… 19 2.4 其他定义 …… 20 2.5 参考定义框架 …… 20 2.6 本章小结 …… 21 思考题 …… 22 参考文献 …… 22 第3章 软件架构模型 …… 23 3.1 引言 …… 23 3.2 软件架构的可视化建模方法 …… 24 3.2.1 基于图形可视化的建模方法 …… 24 3.2.2 基于UML的建模方法 …… 25 3.3 软件架构的形式化建模方法 …… 31 3.3.1 基于形式化规格说明语言的建模方法 …… 32 3.3.2 基于UML的形式化建模方法 …… 36 3.4 其他建模方法 …… 45 3.4.1 文本语言建模方法 …… 45 3.4.2 模型驱动的架构建模方法 …… 47 3.5 软件架构建模方法的发展趋势分析 …… 49 3.5.1 第1层:文本模型 …… 50 3.5.2 第2层:图形可视化模型 …… 50 3.5.3 第3层:UML模型 …… 50 3.5.4 第4层:形式化模型 …… 51 3.5.5 第5层:未来模型 …… 52 3.6 本章小结 …… 52 思考题 …… 53 参考文献 …… 53 第4章 软件架构的风格与模式 …… 59 4.1 软件架构风格的定义 …… 59 4.2 软件架构风格的分类 …… 60 4.3 典型的软件架构风格 …… 60 4.3.1 管道-过滤器风格 …… 60 4.3.2 主程序/子程序风格 …… 62 4.3.3 面向对象风格 …… 64 4.3.4 层次化风格 …… 65 4.3.5 事件驱动风格 …… 67 4.3.6 解释器风格 …… 69 4.3.7 基于规则的系统风格 …… 71 4.3.8 仓库风格 …… 73 4.3.9 黑板系统风格 …… 75 4.3.10 C2风格 …… 77 4.3.11 客户机/服务器风格 …… 79 4.3.12 浏览器/服务器风格 …… 83 4.3.13 平台/插件风格 …… 85 4.3.14 面向Agent风格 …… 87 4.3.15 面向方面架构风格 …… 91 4.3.16 面向服务架构风格 …… 93 4.3.17 正交架构风格 …… 95 4.3.18 异构风格 …… 97 4.3.19 基于层次消息总线的架构风格 …… 99 4.3.20 模型-视图-控制器风格 …… 101 4.4 软件架构模式 …… 103 4.5 本章小结 …… 103 思考题 …… 104 参考文献 …… 104 第5章 软件架构描述语言 …… 107 5.1 引言 …… 107 5.2 ADL的核心设计元素 …… 107 5.2.1 组件 …… 108 5.2.2 连接件 …… 108 5.2.3 架构配置 …… 109 5.3 几种典型的ADL …… 109 5.3.1 Aesop …… 109 5.3.2 C2 SADL …… 110 5.3.3 UniCon …… 114 5.3.4 Wright …… 116 5.3.5 XYZ/ADL …… 117 5.3.6 ACME …… 118 5.3.7 XBA …… 118 5.3.8 ABC/ADL …… 120 5.3.9 MetaH …… 121 5.3.10 Rapide …… 121 5.3.11 Darwin …… 122 5.3.12 xADL 2.0 …… 122 5.4 本章小结 …… 123 思考题 …… 123 参考文献 …… 123 第6章 软件架构与敏捷开发 …… 125 6.1 软件开发的发展简史 …… 125 6.2 敏捷开发 …… 127 6.2.1 敏捷开发的基本理念 …… 127 6.2.2 敏捷开发实践 …… 128 6.3 敏捷开发过程中的软件架构设计 …… 130 6.3.1 需求分析 …… 130 6.3.2 初始设计 …… 130 6.3.3 迭代过程 …… 130 6.3.4 敏捷的设计思想 …… 131 6.4 两类常见的敏捷软件架构设计方法 …… 132 6.4.1 敏捷开发初始阶段设计 …… 133 6.4.2 敏捷开发迭代过程中的设计 …… 134 6.5 本章小结 …… 136 思考题 …… 137 参考文献 …… 137 中篇 工程实践篇 第7章 架构驱动的软件开发 …… 140 7.1 架构驱动的软件开发简介 …… 140 7.2 架构需求获取 …… 140 7.3 架构设计、文档化和评估 …… 144 7.3.1 架构设计、文档化和评估是一个迭代过程 …… 144 7.3.2 什么是架构的结构 …… 147 7.3.3 从架构需求出发的评估 …… 148 7.3.4 寻找ATAM中的“权衡点”和“敏感点” …… 149 7.4 架构的实现与维护 …… 151 7.4.1 架构的实现 …… 151 7.4.2 架构的维护 …… 152 7.5 本章小结 …… 152 思考题 …… 152 参考文献 …… 153 第8章 软件架构设计和实现 …… 154 8.1 从需求分析到架构设计 …… 154 8.1.1 软件架构对需求的影响 …… 155 8.1.2 基于软件需求的软件架构设计 …… 156 8.1.3 需求与架构的协同演化 …… 163 8.2 从软件架构到详细设计 …… 163 8.2.1 详细设计对软件架构的影响 …… 164 8.2.2 从软件架构映射到详细设计 …… 166 8.2.3 软件架构视图 …… 168 8.3 软件架构设计原则 …… 169 8.3.1 架构设计的一些基本原则 …… 169 8.3.2 架构设计的关键原则 …… 170 8.4 软件架构设计面临的主要威胁及对策 …… 171 8.4.1 被忽略的重要非功能需求 …… 171 8.4.2 频繁变化的需求 …… 172 8.4.3 考虑不全面的架构设计 …… 172 8.4.4 不及时的架构验证 …… 173 8.4.5 较高的创造性架构比重 …… 173 8.4.6 架构的低可执行性 …… 174 8.5 本章小结 …… 174 思考题 …… 174 参考文献 …… 174 第9章 软件架构的演化和维护 …… 178 9.1 软件架构演化和软件架构定义的关系 …… 179 9.1.1 对象演化 …… 179 9.1.2 消息演化 …… 180 9.1.3 复合片段演化 …… 184 9.1.4 约束演化 …… 186 9.2 软件架构演化方式的分类 …… 186 9.2.1 软件架构静态演化 …… 187 9.2.2 软件架构动态演化 …… 190 9.3 软件架构演化原则 …… 197 9.4 软件架构维护 …… 201 9.4.1 软件架构知识管理 …… 201 9.4.2 软件架构修改管理 …… 202 9.4.3 软件架构版本管理 …… 202 9.5 本章小结 …… 202 思考题 …… 203 参考文献 …… 203 第10章 软件架构恢复 …… 207 10.1 引言 …… 207 10.1.1 软件架构的恢复过程 …… 208 10.1.2 架构信息提取 …… 208 10.1.3 架构恢复技术 …… 209 10.2 架构信息提取 …… 212 10.2.1 相关定义 …… 212 10.2.2 从源代码提取架构信息 …… 212 10.2.3 从编译构建过程提取架构信息 …… 215 10.2.4 从层次提取架构信息 …… 217 10.2.5 基于架构文档的架构信息提取 …… 219 10.3 基于多规则聚类的架构恢复 …… 220 10.3.1 聚类理论基础 …… 220 10.3.2 架构恢复流程 …… 222 10.3.3 具体恢复技术 …… 223 10.4 本章小结 …… 232 思考题 …… 233 参考文献 …… 233 第11章 软件架构质量 …… 237 11.1 引言 …… 237 11.2 软件架构与质量属性 …… 239 11.3 软件架构质量指标 …… 240 11.3.1 内部质量指标 …… 240 11.3.2 外部质量指标 …… 243 11.4 软件架构质量保障和评估方法 …… 245 11.4.1 评估准备 …… 246 11.4.2 利益相关者 …… 247 11.4.3 参与者 …… 248 11.4.4 评估时机 …… 249 11.4.5 评估技术 …… 250 11.4.6 软件架构评估的收益与成本 …… 253 11.5 本章小结 …… 254 思考题 …… 254 参考文献 …… 254 第12章 软件架构仿真 …… 256 12.1 软件仿真的概念 …… 256 12.1.1 连续型仿真 …… 256 12.1.2 离散型仿真 …… 257 12.1.3 混合型仿真 …… 257 12.2 软件架构仿真流程 …… 258 12.3 UML软件架构仿真 …… 259 12.3.1 基于UML类图和顺序图的软件架构仿真 …… 259 12.3.2 基于UML用例图和活动图的软件架构仿真 …… 259 12.3.3 从带有注释的UML图产生OPNET仿真模型 …… 260 12.4 非UML软件架构仿真 …… 261 12.4.1 SASIM仿真:用于系统功能分析 …… 261 12.4.2 面向对象数据库的架构仿真 …… 263 12.5 软件架构仿真实践 …… 264 12.5.1 软件架构描述文档 …… 264 12.5.2 SSD和SD转化为事件执行图 …… 266 12.5.3 局部仿真和整体仿真 …… 269 12.5.4 仿真结果的分析 …… 275 12.6 本章小结 …… 276 思考题 …… 276 参考文献 …… 277 第13章 软件架构度量和评估 …… 279 13.1 引言 …… 279 13.1.1 单版本的软件架构度量和评估 …… 280 13.1.2 多版本的软件架构度量和评估 …… 281 13.2 典型的软件架构度量和评估方法 …… 283 13.2.1 SAEM方法 …… 283 13.2.2 SAABNet方法 …… 283 13.2.3 SACMM方法 …… 285 13.2.4 SASAM方法 …… 287 13.2.5 ALRRA方法 …… 288 13.2.6 AHP方法 …… 290 13.2.7 COSMIC+UML方法 …… 291 13.2.8 基于Shannon信息论的方法 …… 292 13.3 软件架构度量和评估过程 …… 293 13.3.1 质量属性选择 …… 293 13.3.2 软件架构可维护性度量及评估 …… 294 13.3.3 软件架构可靠性度量及评估 …… 297 13.4 软件架构演化度量和评估实践 …… 302 13.4.1 演化过程已知的软件架构演化评估 …… 302 13.4.2 演化过程未知的软件架构演化评估 …… 305 13.4.3 实例分析 …… 305 13.5 本章小结 …… 313 思考题 …… 313 参考文献 …… 313 第14章 软件架构形式化验证 …… 317 14.1 引言 …… 317 14.2 形式化验证 …… 317 14.2.1 形式语义 …… 318 14.2.2 规约语言 …… 318 14.2.3 求精分析 …… 319 14.2.4 验证方法 …… 320 14.2.5 形式化验证方法的优缺点 …… 320 14.3 软件架构验证 …… 322 14.3.1 静态软件架构验证 …… 322 14.3.2 动态软件架构验证 …… 323 14.3.3 运行态软件架构验证 …… 323 14.4 基于SPIN的静态软件架构验证实践 …… 324 14.4.1 SPIN简介 …… 324 14.4.2 基于SPIN的验证过程 …… 325 14.4.3 架构模型 …… 326 14.4.4 验证模型 …… 332 14.4.5 验证结果 …… 334 14.5 架构演化验证案例分析——以MVC为例 …… 335 14.5.1 演化案例 …… 335 14.5.2 场景1演化评估 …… 337 14.5.3 场景2演化评估 …… 341 14.6 本章小结 …… 344 思考题 …… 345 参考文献 …… 345 第15章 软件架构分析与测试 …… 347 15.1 引言 …… 347 15.2 软件架构分析方法 …… 347 15.2.1 SAAM …… 348 15.2.2 SAAMCS …… 350 15.2.3 ESAAMI …… 351 15.2.4 SAAMER …… 352 15.2.5 ATAM …… 352 15.2.6 QAW …… 356 15.2.7 OATAM …… 358 15.2.8 ARID …… 358 15.2.9 SBAR …… 361 15.2.10 ALPSM …… 362 15.2.11 SNA …… 362 15.2.12 ALMA …… 363 15.2.13 PSAEM …… 364 15.2.14 ASAAM …… 365 15.2.15 PASA …… 365 15.2.16 SALUTA …… 367 15.2.17 HoPLAA …… 368 15.2.18 CBAM …… 370 15.2.19 CPASA …… 370 15.3 软件架构测试 …… 371 15.4 本章小结 …… 371 思考题 …… 372 参考文献 …… 372 第16章 软件架构重构 …… 375 16.1 引言 …… 375 16.2 软件重构现状 …… 376 16.2.1 软件重构概念 …… 376 16.2.2 重构点识别和定位方法 …… 376 16.2.3 重构实施技术 …… 379 16.2.4 现状分析 …… 380 16.3 基于度量的软件架构重构 …… 381 16.3.1 软件架构度量评估 …… 382 16.3.2 产生重构需求 …… 385 16.3.3 分析重构需求 …… 385 16.3.4 建议重构操作 …… 387 16.3.5 实施重构操作 …… 389 16.4 面向模式的软件架构重构 …… 392 16.4.1 模式选择 …… 392 16.4.2 重构点定位 …… 393 16.4.3 重构实施 …… 394 16.5 本章小结 …… 397 思考题 …… 398 参考文献 …… 398 下篇 未来主题篇 第17章 软件架构的腐蚀和对策 …… 402 17.1 引言 …… 402 17.2 软件架构腐蚀的含义 …… 403 17.3 软件架构腐蚀的预防控制策略 …… 403 17.3.1 腐蚀最小化方法 …… 403 17.3.2 腐蚀预防方法 …… 406 17.3.3 腐蚀修补方法 …… 407 17.4 软件架构实践中面临的主要威胁及其对策 …… 408 17.4.1 主要威胁 …… 408 17.4.2 有效对策 …… 409 17.5 本章小结 …… 409 思考题 …… 409 参考文献 …… 409 第18章 软件架构解耦 …… 412 18.1 引言 …… 412 18.2 分层架构及其解耦 …… 413 18.2.1 模式描述 …… 413 18.2.2 架构解耦 …… 413 18.2.3 实例分析 …… 414 18.3 微内核架构及其解耦 …… 414 18.3.1 模式描述与解耦 …… 415 18.3.2 实例分析 …… 415 18.4 微服务架构及其解耦 …… 416 18.4.1 模式描述与解耦 …… 416 18.4.2 设计原则 …… 417 18.4.3 实例分析 …… 417 18.5 黑板架构风格及其解耦 …… 418 18.6 干净架构及其解耦 …… 419 18.6.1 模式描述 …… 419 18.6.2 架构解耦 …… 421 18.7 管道-过滤器风格及其解耦 …… 421 18.7.1 模式描述与解耦 …… 421 18.7.2 实例分析 …… 422 18.8 基于元模型的架构及其解耦 …… 422 18.9 REST架构风格及其解耦 …… 422 18.10 本章小结 …… 424 思考题 …… 424 参考文献 …… 424 第19章 软件架构技术债 …… 426 19.1 引言 …… 426 19.2 技术债简介 …… 426 19.2.1 技术债的定义 …… 426 19.2.2 技术债的分类 …… 427 19.2.3 技术债的产生 …… 428 19.3 设计债 …… 429 19.3.1 设计债的定义 …… 429 19.3.2 设计债的识别方法 …… 429 19.3.3 架构技术债 …… 430 19.4 代码债 …… 432 19.5 测试债 …… 432 19.6 文档债 …… 433 19.7 技术债的处理 …… 433 19.7.1 发现技术债 …… 433 19.7.2 管理技术债 …… 433 19.7.3 偿还技术债 …… 435 19.8 本章小结 …… 435 思考题 …… 435 参考文献 …… 436 第20章 软件架构坏味道 …… 438 20.1 引言 …… 438 20.2 典型的代码坏味道 …… 439 20.2.1 应用级坏味道 …… 439 20.2.2 类级坏味道 …… 440 20.2.3 方法级坏味道 …… 441 20.3 典型的设计坏味道 …… 442 20.3.1 架构坏味道 …… 442 20.3.2 架构坏味道的检测 …… 447 20.4 本章小结 …… 450 思考题 …… 451 参考文献 …… 451 第21章 软件架构脆弱性 …… 453 21.1 引言 …… 453 21.2 什么是软件脆弱性 …… 453 21.2.1 软件脆弱性定义 …… 453 21.2.2 软件脆弱性的特点和产生的原因 …… 454 21.2.3 软件脆弱性的生命周期 …… 455 21.3 典型的软件架构脆弱性 …… 455 21.3.1 分层架构 …… 456 21.3.2 C/S架构 …… 457 21.3.3 B/S架构 …… 457 21.3.4 事件驱动架构 …… 458 21.3.5 MVC架构 …… 460 21.3.6 微内核架构 …… 461 21.3.7 管道-过滤器架构 …… 461 21.3.8 黑板模式架构 …… 462 21.3.9 微服务架构 …… 462 21.3.10 基于空间的架构 …… 463 21.3.11 PAC架构 …… 464 21.4 本章小结 …… 465 思考题 …… 466 参考文献 …… 466 第22章 软件架构模式识别 …… 468 22.1 引言 …… 468 22.2 模式识别方法现状 …… 468 22.2.1 设计模式识别现状 …… 468 22.2.2 架构模式识别现状 …… 469 22.3 两种典型的架构模式识别方法 …… 470 22.3.1 IDAPO方法 …… 470 22.3.2 基于DSL的架构模式识别方法 …… 472 22.4 基于本体的架构模式识别方法 …… 473 22.4.1 可行性分析 …… 473 22.4.2 识别过程 …… 474 22.4.3 典型步骤 …… 475 22.5 本章小结 …… 481 思考题 …… 481 参考文献 …… 481 第23章 结束语 …… 484 23.1 软件架构是早期阶段质量保障的基础 …… 484 23.2 软件架构的作用 …… 485 23.2.1 好的架构设计能够满足系统的多种品质 …… 485 23.2.2 架构设计能够使利益相关者达成一致的目标 …… 485 23.2.3 架构设计能够支持计划编制过程 …… 485 23.2.4 架构设计能够有效地管理复杂性 …… 486 23.2.5 架构设计为重用奠定了基础 …… 486 23.2.6 架构设计能够降低维护费用 …… 487 23.2.7 架构设计能够支持冲突分析 …… 487 23.2.8 架构设计的其他作用 …… 487 23.3 软件架构发展趋势 …… 487 思考题 …… 489 参考文献 …… 489 |