基本信息
- 原书名:Designing Software Architectures: A Practical Approach

内容简介
目录
前言
第1章 引言 1
1.1 写作动机 1
1.2 软件架构 2
1.2.1 软件架构的重要性 2
1.2.2 生命周期活动 3
1.3 架构师的角色 5
1.4 ADD发展史 6
1.5 小结 7
1.6 扩展阅读 8
第2章 架构设计 9
2.1 通用设计 9
2.2 软件架构中的设计 10
2.2.1 架构设计 11
2.2.2 元素交互设计 11
2.2.3 元素内部设计 12
2.3 为什么架构设计如此重要 13
2.4 架构驱动因子 13
2.4.1 设计目的 14
前言
本书的主旨是介绍设计过程和一种特殊的设计方法,这种方法称为属性驱动设计(Attribute-Driven Design,ADD)。我们相信这种方法非常有效,能帮助读者以有原则、有纪律和可重复的方式完成设计。在本书中,列举了属性驱动设计及现实生活中的几个有关属性驱动设计的真实案例。我们将通过这些案例演示如何进行架构设计。即便你目前没有足够的设计经验,我们会举例说明如何借助该方法来复用设计概念,即那些历经考验的经典方案。
尽管属性驱动设计十多年前已经提出,关于它的文字资料却很少,也很少有资料可以提供属性驱动设计的实例并对其具体实现过程加以解释。因为公开信息的缺乏,人们很难使用该方法或将该方法传授给他人。此外,一些已经发表的关于属性驱动开发的文档也都比较概括,很少涉及架构师日常使用的概念、实践和技术。
我们已经跟职业架构师一起工作了多年,曾指导他们如何进行设计,以及如何在设计过程中学习。同时我们也学到了很多,例如,我们了解到职业架构师在设计过程的早期会考虑哪些技术因素,这一点在之前的属性驱动设计版本中是没有的。就因为这个原因,该方法被很多实践者认为跟实际脱节。本书提供了一个修正过的属性驱动设计新版本。在该版本中,我们试图不遗余力地在理论和实践之间架设桥梁,缩小理论和实践之间的差距。
虽然我们已经教授了多年软件架构和设计软件,但是一路走来我们认识到,对没有经验的人来说,软件架构和软件设计太难了。这种认识促使我们去创建设计路线图,可以肯定的是,这样可以有效引导人们完成相关设计过程。我们同时设计了一种针对软件设计教学的游戏,可以作为本书的配套部分。
本书面向的读者首先是那些对软件架构设计感兴趣的人,尤其是那些必须展开这项设计任务现阶段却不得不使用某些临时性方案的行业内人士,本书定会对他们别有益处。而对于有经验的软件架构设计者来说,他们已经有了一套逐步建立起来的设计方法,相信这些读者也能通过本书找到新的思路。例如,如何用看板(Kanban)追踪设计进度,如何利用基于策略的问卷调查分析一个设计理念,如何通过设计方法完成早期的评估预测。再者,对于已经在软件工程学院熟知其他架构方法的读者,则可以得到属性驱动设计与其他设计方法的关联信息。例如,与质量属性工作坊(Quality Attribute Workshop,QAW),与架构权衡分析方法(Architecture Tradeoff Analysis,ATAM),以及与成本效益分析方法(Cost Benefit Analysis Method,CBAM)之间的联系。最后,本书也适合计算机科学或者软件工程专业的学生和老师阅读。我们深信本书中列举的案例研究可以帮助读者理解如何更轻松地完成一系列的设计过程。可以肯定的是,我们已经在课程中运用了相似的案例,并且效果显著。就像爱因斯坦所说的,“举例不是教学时可供选择的方式,而是唯一的方式。”
我们期望本书能够让读者明白,设计其实是有套路可依的,按照这样的方法或者套路,你能够在今后的软件架构设计中设计出更优秀的软件产品。
本书各章内容如下:
第1章简明地介绍了软件架构和属性驱动设计方法。
第2章讨论软件架构设计的细节,设计过程的主要输入—架构驱动因子,以及设计的概念,这些概念会帮助你明白如何利用已经过验证的方案来理清这些驱动因子有哪些。
第3章详细介绍属性驱动设计方法。重点讨论属性驱动设计方法的各个步骤,以及能够用来完成这些步骤的多项技术。
第4章解释了“绿地”(greenfield)系统的开发实例。在该案例研究中,我们尽力解释如何将第3章描述的大多数概念运用到设计过程中,因此,你可以自然地认为该案例研究比较“学术”(虽然该案例源于真实存在的系统)。
第5章阐述第二个案例研究,该案例是与职业软件架构师合作完成的,因而更加专业、更加详细。它将以翔实的细节展示属性驱动设计如何应用于涉及多种技术的大数据系统的设计中。该案例展示了如何在“新”领域中开发系统,而不是在第4章提到的传统领域。
第6章是一个较短的案例研究,展示如何将属性驱动设计应用于常见的遗留(或棕地,brownfield)系统的扩展设计中。该实例说明架构设计并非是在系统开发第一版时一次完成的,而是在开发过程的不同阶段实施的。
第7章展示了其他一些设计方法。在属性驱动设计的修正版本中,我们采纳了其他设计过程研究者的想法,在此简要总结了他们的方法,在向他们的工作致敬的同时,也比较了属性驱动设计与其方法的不同。
第8章深入讨论了分析这个主题(尽管这是一本关于设计的书)。分析本来就是设计的一部分,所以本章讲述了一些技巧,它们既可以用于设计过程当中,又可以用于部分设计完成后。我们专门介绍了基于策略问卷调查方法的使用,该方法能帮助我们简单有效地理解设计过程中的种种决定。
第9章展示了设计过程如何适应组织级别的应用。例如,在项目周期的最早期进行一些架构设计有助于评估目标。同时,还展示了属性驱动设计如何与其他软件开发方法协同工作。
第10章总结了全书内容。
本书附有两个附录。附录A给出了各种设计概念的目录,这些设计概念可用于特定的应用领域。该目录集合了我们从各处收集的设计概念,反映了现实中那些经验丰富、训练有素的架构师是如何工作的。目录包含了第4章案例研究中使用的设计概念的样本。附录B针对7个最常见的质量属性提供了一套基于策略的问卷调查(详见第8章),同时针对DevOps额外提供了一份问卷调查。
致谢
序言
从机械工业出版社华章公司王春华老师那里获知有一本有关软件架构设计的图书正在征集译者,作为软件从业人员,我表示出极大的兴趣。在看过英文版并试译完样章后,我和几位志同道合的软件工程师一起开始了本书的翻译工作。
在此要感谢机械工业出版社的关敏老师、王春华老师给予我们的支持和信任。因为这份信任,我们才有机会来翻译这本关于软件架构设计的书籍。
本书系统地讲解了一个通常我们认为很复杂的问题—软件架构设计,里面提供的案例有很强的可参照性,所涉及的工具也具有很好的可操作性。
书中介绍了架构的设计过程以及设计方法:属性驱动设计(ADD)。利用ADD,可以帮助使用者在设计过程中不断重构设计。作者通过介绍ADD的概念和ADD的几个应用实例,展示了如何执行架构设计,如何重用设计概念,即借用其他成熟的解决方案。本书特别适合想要“从入门到精通”掌握软件架构设计的读者。
在介绍架构设计的概念、方法、流程和理论时,本书结合了非常新鲜、实用的实例,一步一步演示使用ADD方法完成架构设计的方方面面,通俗易懂。在学习理论方法的同时,还能够了解时下广泛发展的一些框架和技术,相信读者会从本书中学习到翔实的架构知识,从而受益匪浅。
作为软件从业人员,我参与过软件开发、测试和项目管理,在实际工作中深刻地认识到好的软件架构对于软件产品的决定性意义。参与翻译本书的过程也是一次满足自己好奇心和求知欲的过程。希望读者在阅读本书的过程中也能获得和我一样的愉快体验。
最后,由于译者水平有限,书中难免出现疏漏之处,恳请读者批评指正。
读者对象
本书适合以下几类读者阅读:
软件架构师
有志于成为软件架构师的软件从业人员
计算机相关专业的在读学生
勘误支持
虽然译者试图努力保证本书中不出现错误,但鉴于译者的知识水平和视角,本书中难免出现用词错误或者技术问题。在此,恳请读者不吝指教,指出错误。请读者发送邮件到cy.yss@163.com,帮助我们修正错误。
译者分工
本书由来自IBM中国开发中心的软件工程师及项目经理联合翻译完成。其中刘旭斌翻译了第1章、第7章和第9章;陈瑶翻译了第2章和第3章;邵元英翻译了第4章和第8章;栾云杰翻译了第5章、第6章和第10章。附录部分由上面四位共同负责。
致谢
感谢华章公司引进本书的中文版版权,这是本书中文版得以面市的核心要素。
感谢华章公司的关敏和王春华老师,她们专业的编辑水平为本书提供了重要的质量保证。