http://martinfowler.com/articles/designDead.html#DoYouWannaBeAnArchitectWhenYouGrowUp
在马大叔的文章中讨论了计划式设计和进化式设计的不同
在Planned Design中,人们通常会做一个Front-Big-Design,其优势就是可以讲设计职责和开发职责区分开,设计的人负责设计,开发的人负责开发。但是在现代软件工程领域Planned Design有诸多的缺点:
第一,过度依赖于设计者的技能,如果设计者能力不足或者设计不周全而使得实现者产生疑问时,沟通较复杂,过程较长。
第二,这种模式使得设计者完全脱离编码,而技术在这过程中会变革,设计思想也会变革,实现方式也会变革,而设计者无法发觉这一些,设计也就逐步落后。
第三,很多时候设计的问题源于需求的变化,几乎没人能够在设计之前预测出所有的需求可变点。
综合上述,马大叔更喜欢XP推崇的code and fix进化式设计方式,只在前期做最简单的设计,不需要为未来变化提供任何空间,而等到变化发生时,通过重构完成改变,通过单元测试保证改变的正确。
我记得还有人说过,最好的设计往往不是设计出来的,而是随着代码的不断编写而自然浮现出来的,在很多优秀的开源项目中下载不到设计文档我想很大程度上是因为“最好的设计说明就是代码本身”而在前期投入低设计时间甚至没有UML图,这是敏捷所倡导的。