
架构设计的重要性是无需赘言的。架构的生命力往往伴随业务的成长而成长,甚至超越具体技术的变化,因而如何设计能够不断演进,始终支持业务发展的架构一直是软件开发方法研究的核心。
在传统开发方法中,架构设计是围绕着设计文档展开的。具体实施过程有如下特点:
思考传统架构设计方法,我们不禁要提出这样的问题:
为什么传统开发方法会如此重视前期预先架构设计,以至于希望在实际开发前把架构设计做到尽善尽美?
答案在于:在传统的概念中,一旦设计成型,架构是很难调整的,例如,传统的软件工程教科书中都会讨论“架构调整的成本”问题:如果在设计中实现一次修改的成本为1;在实现过程中相同修改的成本就是5~10;在测试、部署阶段,同样的修改成本将上升到50~100;维护阶段同样修改的成本更是成指数曲线上升。
但这种策略存在一个根本问题:软件的“扩展”究竟会如何发生是很难预计的。面对这一困境,传统开发方法的解决方案是继续增加预先设计的时间和人力,但往往收效甚微。
传统预先设计方法恶性循环的原因有三点,对应上述实施过程的特点:
敏捷方法认为,好的架构就是适应于当前需求的架构。也就是说,如果当前的应用和需求发生了变化,特别是发生了很大的变化,原来的好架构就完全可能不合适新的变化,也就变成了不好的架构。
传统开发方法中,经常需要在项目的二期、三期抛弃已有成果,重新开始,一个重要原因就是原来的架构体系已经到了不能支撑现有应用的程度了。尽管传统开发方法尝试对此加以补救,增加了很多相应的流程(例如增改需求之后就会伴随着架构设计修改和评审),但架构不能适应新需求的情况仍然不时发生,因为需求的变化本就是无法预测的。
在总结以往方法学的经验和教训的基础上,敏捷方法提出了一系列的架构设计方法:
从上述的方法中可以看出在设计方面敏捷方法与传统方法的一个本质区别:
在实现过程中进行设计,实现和设计密不可分
下面我们将在介绍这些敏捷实践的过程中介绍敏捷的设计/实现实践。