软件架构设计:实用方法及实践
上QQ阅读APP看书,第一时间看更新

1.1 写作动机

本书的目标是教会你如何通过一种系统化的、可预测的、可重复的、高性价比的方法进行软件架构设计。如果你正准备读这本书,那说明你或许对架构设计感兴趣并有志成为一名架构师。好消息是:你的目标并不遥远。要就这一点说服你,我们会花些功夫来谈论设计的想法——针对任何事物的设计——然后我们都会明白架构设计在如何做上是一致的,在为何做上也是一致的。在很多领域,“设计”包含相同的挑战和思考——满足利益干系人的需求,坚守预算和进度,处理约束条件,等等。尽管因为所涉及领域的不同,涉及的基本事物和设计工具也可能不同,但是设计的目标和步骤却并无差异。

这是个令人鼓舞的好消息,因为这意味着设计不只是行家的专有领地。也就是说,设计既可以教,也可以学。大多数设计,特别是在工程领域,由已知的(有时是创新的)基本设计组成,这些设计可以实现可预见的成果。当然,细节最令人头疼,但这就是我们的方法存在的意义。起初这似乎很难想象,像设计这种创造性的工作可以用一种循序渐进的方法来实现;然而,这不仅可能而且还是有价值的,如同Parnas和Clements在他们的论文《A Rational Design Process: How and Why to Fake It》中讨论的那样。当然,不是每个人都可以成为伟大的设计师,就像不是每个人都可以是托马斯·爱迪生、勒布朗·詹姆斯或罗纳尔多一样。我们要说的是,每个人都可以成为更好的设计师,本书提供了结构化的方法,这些方法源于一些可重用的设计知识,可以帮助你从平凡走向卓越。

我们为什么要写一本关于软件架构设计的书呢?虽然已经有很多关于通用设计的著作,也已经有一些关于软件架构设计的著作,但是还没有一本专门致力于架构设计的书。此外,大多数已有的关于架构设计的书都比较抽象。

我们写这本书的目标是提供一种实用的方法,可以由任何一个称职的软件工程师来执行,也(同样重要的)提供了一系列丰富的案例研究来帮助你了解该方法。阿尔伯特·爱因斯坦曾经说过,“举例不是教学时可供选择的方式,而是唯一的方式”。我们坚信是这样的。对大多数人来说,比起从规则或步骤或原则中学习,从实例中学习的效果会更好。当然,我们需要用步骤、规则和原则指导我们的行为来创建实例,这些例子围绕着我们日常所关心的事情,并帮助我们把步骤具体化。

这并不意味着架构设计永远都那么简单。如果你正在构建一个复杂的系统,那么你可能正试图平衡多个相互竞争的力量,如上市时间、成本、性能、可进化性、可用性、可靠性等。如果你正在调整任何一个维度的边界,那么你作为一个架构师的工作将更加复杂。不只软件,任何工程学科都是如此。如果你研究的是建造大型船舶、摩天大楼或其他复杂的“系统”的历史,你会看到这些系统的架构师如何艰难地做出适当的决策和取舍。的确,架构设计可能始终是困难的,但我们的目的是对于训练有素、受过良好教育的软件工程师来说,让架构设计易于处理和实现。