第6章 软件架构重要吗
那么,软件架构重要吗?敏捷和软件工艺运动帮助提升了我们构建的软件系统的品质,这非常好。它们一起帮助我们在谨慎管理时间和预算限制的同时,写出更好、更能满足业务需求的软件。但是我们能做得更多,因为即使是少量的软件架构,也能帮助预防项目的很多问题。成功的软件项目不仅仅是好的代码,有时候你要暂时跳出代码,总览大局。
缺乏软件架构将引发问题
既然软件架构是关于结构和愿景的,那你可以说它总是存在的。我同意,确实如此。说了这么多,显而易见,不思考软件架构(以及“大局”)会导致团队经常遭遇一些常见问题。问问你自己下面这些问题:
❑ 你的软件系统有良好定义的结构吗?
❑ 团队里每个人都以一致的方式实现特性吗?
❑ 代码库的质量水平一致吗?
❑ 对于如何构建软件,团队有共同的愿景吗?
❑ 团队里每个人都得到了足够的技术指导吗?
❑ 有适当的技术领导力吗?
如果上面某些问题的答案是“不”,那就需要很好的团队和很好的运气才可能成功地交付一个软件项目。如果没人思考软件架构,最终结果往往看起来像一团乱麻(big ball of mud)。当然,会有一个结构,但不是你想要的!其他副作用还包括软件系统太慢、不安全、脆弱、不稳定、难以部署、难以维护、难以改变、难以扩展,等等。我敢肯定你从没见过或参与过这样的软件项目,对吗?你没有,我也没有。
既然软件架构是每个软件系统都固有的,那我们为什么不干脆承认这一点,放一些心思在上面?
软件架构的好处
思考软件架构能带来哪些好处?总结如下:
❑ 让团队跟随一个清晰的愿景和路线图,无论这个愿景是一人所有还是整个团队共有;
❑ 技术领导力和更好的协调;
❑ 与人交流的刺激因素,以便回答与重要决策、非功能需求、限制和其他横切关注点相关的问题;
❑ 识别和减轻风险的框架;
❑ 方法和标准的一致性,随之而来的结构良好的代码库;
❑ 正在构建的产品的坚实基础;
❑ 对不同的听众,以不同层次的抽象来交流解决方案的结构。
所有软件项目都需要软件架构吗
我不会给出“看情况”这种典型的咨询式回答,相反我会说答案毫无疑问是肯定的,并提醒每个软件项目都应该考虑多种因素,以评估必需多少软件架构的思考。这些包括了项目/产品的大小、项目/产品的复杂性、团队的大小和团队的经验。对于多少是“刚刚好”,将在本书其他部分探讨。