前言
当我们在2017年写作本书第1版时,演进式架构的想法仍然有些激进。在Rebecca关于这个主题进行第一次演讲后,有人指责她缺乏职业责任感,因为她提出软件架构可以随着时间的推移而演进——毕竟,架构是永远不会改变的东西。
然而,正如现实告诉我们的那样,系统必须演进以满足其用户的新需求,并反映不断变化的软件开发生态系统。
第1版出版时,很少有工具可以利用我们描述的技术。幸运的是,软件开发世界在不断发展,逐渐有了更多的工具使构建演进式架构变得更容易。
本书结构
我们改变了第1版的结构,更清晰地划分了两个主要主题:演进软件系统的工程实践和使之更容易的结构方法。
在第一部分,我们将定义各种机制和工程实践,团队可以使用它们来实现演进式架构的目标,包括读者需要了解的技术、工具、类别和其他信息。
软件架构还涉及结构设计,某些设计决策可以使演进(和治理)更容易。我们将在第二部分中介绍这一点,该部分还包括架构风格的覆盖范围,以及有关耦合、复用和其他相关结构考虑因素的设计原则。
软件架构中几乎没有任何东西是孤立存在的,演进式架构中的许多原则和实践在软件开发过程中许多部分盘根错节,我们将在第三部分中进行介绍。
案例研究和PenultimateWidgets
本书中我们突出了一些案例研究。四位作者在撰写本书时都是(有些人现在仍然是)顾问,我们利用我们的实际经验推导出本书中出现的许多案例研究。虽然不能透露特定客户的详细信息,但我们希望提供一些相关示例,使主题不那么抽象。因此,我们采取了替身公司“PenultimateWidgets”的想法,让它作为所有案例研究的“主角”。
在写作第2版时,我们还向同事们征集了案例研究,这更凸显了应用所探讨的技巧的用例。在本书中,虽然每个案例研究都以PenultimateWidgets的用例呈现,但它们其实都源自真实项目。
排版约定
本书中使用以下排版约定:
斜体(Italic)
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。
等宽粗体(Constant width bold)
表示应由用户直接输入的命令或其他文本。
等宽斜体(Constant width italic)
表示应由用户提供的值或由上下文确定的值替换的文本。
该图示表示提示或建议。
该图示表示一般性说明。
该图示表示警告。
示例代码
补充材料(代码示例、练习等)可以从http://evolutionaryarchitecture.com下载。
如果有任何技术问题或在使用代码示例时遇到问题,请发邮件到bookquestions@oreilly.com。
本书旨在帮助您完成工作。一般来说,如果本书提供了示例代码,那么您可以在您的程序和文档中使用。除非要复制代码的重要部分,否则不需要联系我们获得许可。例如,编写一个使用了本书多段代码的程序并不需要获得许可。销售或分发O'Reilly书籍中的示例需要获得许可。通过引用本书和示例代码回答问题不需要许可。将本书中的大量示例代码纳入您的产品文档需要获得许可。
我们感谢但一般不要求署名。署名通常包括标题、作者、出版商和ISBN。例如“Building Evolutionary Architectures, Second edition, by Neal Ford, Rebecca Parsons, Patrick Kua, and Pramod Sadalage(O'Reilly). Copyright 2023 Neal Ford, Rebecca Parsons, Patrick Kua, and Pramod Sadalage, 978-1-492-09754-9.”
如果您认为对代码示例的使用超出了合理使用或上述许可范围,请随时通过permissions@oreilly.com联系我们。
O'Reilly在线学习平台(O'Reilly Online Learning)
40多年来,O'Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O'Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn。
本书配套网站https://oreil.ly/evolutionary-arch-2e上列出了勘误表、示例以及其他信息。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站http://oreilly.com。
我们在Facebook上的地址:http://facebook.com/oreilly
我们在Twitter上的地址:http://twitter.com/oreillymedia
我们在YouTube上的地址:http://youtube.com/oreillymedia
更多信息
作者为本书维护了一个配套网站:http://evolutionaryarchitecture.com。
致谢
我们想向为本书中所呈现的许多适应度函数案例研究提供了提纲和灵感的同事们表示感谢。以下排名不分先后,感谢Carl Nygard、Alexandre Goedert、Santhoshkumar Palanisamy、Ravi Kumar Pasumarthy、Indhumathi V.、Manoj B.Narayanan、Neeraj Singh、Sirisha K.、Gireesh Chunchula、Madhu Dharwad、Venkat V.、Abdul Jeelani、Senthil Kumar Murugesh、Matt Newman、Xiaojun Ren、Archana Khanal、Heiko Gerin、Slin Castro、Fernando Tamayo、Ana Rodrigo、Peter Gillard-Moss、Anika Weiss、Bijesh Vijayan、Nazneen Rupawalla、Kavita Mittal、Viswanath R.、Dhivya Sadasivam、Rosi Teixeira、Gregorio Melo、Amanda Mattos等人以及其他我们未能提及姓名的同事。
Neal感谢过去几年参加他演讲的各大会议的所有与会者,因为他们通过现场互动和在线交流,帮助他完善和修订了本书内容,特别是在全球疫情流行的情况下。感谢所有勇敢地站在第一线,帮助我们度过这个艰难时期的工作人员。他还要感谢技术审稿人,他们尽职尽责,为本书提供了及时的反馈和有用的建议。他还要感谢他的猫Amadeus、Fauci和Linda Ruth,虽然它们时常让他分心,但也会让他有灵感乍现的时刻。猫儿们从不沉迷于过去或未来,它们总是活在当下,所以他总会花些时间和猫儿共处。感谢我们的户外社区“鸡尾酒俱乐部”,它起源于邻里之间想要和朋友见面的方式,现在已经发展成为社区的智囊团。最后,他感谢一直忍耐他的妻子,她总是面带微笑地容忍着他的出差和突然中断的出差等职业生涯上的倒霉事儿。
Rebecca感谢多年来为演进式架构领域贡献思路、工具和方法,提出并澄清问题的同事、会议参与者和演讲者及作者。与Neal一样,她也感谢技术审稿人仔细的阅读和评论。此外,她还要感谢合著者,感谢他们在共同撰写本书时进行的启迪性对话和讨论。特别地,她要感谢Neal,因为几年前他们进行了一次有关演进式架构和新兴架构区别的讨论或者说争论。这些想法从那时起已经取得了长足的进步。
Patrick感谢在Thoughtworks工作的所有同事和客户,他们的需求和实践为他阐述构建演进式架构的思路提供了试验基础。他和Neal与Rebecca一样都表示了对技术审稿人的感谢,他们的反馈极大地改进了本书。最后,他要感谢过去几年的合著者,感谢他们与他就这一主题进行密切合作,尽管大家所处时区不同以及航班协调困难使得面对面交谈难以成行。
Pramod感谢一直以来给予他空间和时间探索新思路、推进创新思维的所有同事和客户。他还感谢合著者在深入讨论中确保考虑到架构的各个方面。同时,他还感谢审稿人Cassandra Shum、Henry Matchen、Luca Mezzalira、Phil Messenger、Vladik Khononov、Venkat Subramanium和Martin Fowler提供的有益评论,这些评论对作者大有帮助。最后,他要感谢女儿Arula和Arhana给他带来的喜悦,以及妻子Rupali给予他的所有爱和支持。