第6章 软件架构重要吗

那么,软件架构重要吗?敏捷和软件工艺运动帮助提升了我们构建的软件系统的品质,这非常好。它们一起帮助我们在谨慎管理时间和预算限制的同时,写出更好、更能满足业务需求的软件。但是我们能做得更多,因为即使是少量的软件架构,也能帮助预防项目的很多问题。成功的软件项目不仅仅是好的代码,有时候你要暂时跳出代码,总览大局。

缺乏软件架构将引发问题

既然软件架构是关于结构和愿景的,那你可以说它总是存在的。我同意,确实如此。说了这么多,显而易见,不思考软件架构(以及“大局”)会导致团队经常遭遇一些常见问题。问问你自己下面这些问题:

❑ 你的软件系统有良好定义的结构吗?

❑ 团队里每个人都以一致的方式实现特性吗?

❑ 代码库的质量水平一致吗?

❑ 对于如何构建软件,团队有共同的愿景吗?

❑ 团队里每个人都得到了足够的技术指导吗?

❑ 有适当的技术领导力吗?


如果上面某些问题的答案是“不”,那就需要很好的团队和很好的运气才可能成功地交付一个软件项目。如果没人思考软件架构,最终结果往往看起来像一团乱麻(big ball of mud)http://www.laputan.org/mud/。当然,会有一个结构,但不是你想要的!其他副作用还包括软件系统太慢、不安全、脆弱、不稳定、难以部署、难以维护、难以改变、难以扩展,等等。我敢肯定你从没见过或参与过这样的软件项目,对吗?你没有,我也没有。

既然软件架构是每个软件系统都固有的,那我们为什么不干脆承认这一点,放一些心思在上面?

软件架构的好处

思考软件架构能带来哪些好处?总结如下:

❑ 让团队跟随一个清晰的愿景和路线图,无论这个愿景是一人所有还是整个团队共有;

❑ 技术领导力和更好的协调;

❑ 与人交流的刺激因素,以便回答与重要决策、非功能需求、限制和其他横切关注点相关的问题;

❑ 识别和减轻风险的框架;

❑ 方法和标准的一致性,随之而来的结构良好的代码库;

❑ 正在构建的产品的坚实基础;

❑ 对不同的听众,以不同层次的抽象来交流解决方案的结构。

所有软件项目都需要软件架构吗

我不会给出“看情况”这种典型的咨询式回答,相反我会说答案毫无疑问是肯定的,并提醒每个软件项目都应该考虑多种因素,以评估必需多少软件架构的思考。这些包括了项目/产品的大小、项目/产品的复杂性、团队的大小和团队的经验。对于多少是“刚刚好”,将在本书其他部分探讨。