Posted on 2005-12-28 23:11
canonical 阅读(1538)
评论(3) 编辑 收藏 所属分类:
设计理论
Agile批评过度设计(over-engineering)的声音很大,但对于设计不足(under-engineering)同样是持坚决的否定态度
的。修改过度设计的应用比修改设计不足的程序要容易的多。因为简化的途径是明确的,而走向复杂的途径却往往是难以控制的。Refactoring To
Patterns试图引入一些经验,但这些可预见的调整多半只在细节处,其影响是局部的。一个复杂性低层次的设计要支持一个复杂性高的应用,所需的代码量
不是线性的堆砌,而是几何级数式的增长,重构的时候需要做出的改变往往也是影响全局的。而事实上,设计不足是比过度设计更加常见的情况。真实的情况也许
是,在真正需要我们做出创造性设计的地方我们因为无知和无能而设计不足,而在那些渴求简单的地方,我们却自诩为先知而加上很多华丽的设计来维护虚幻的可扩
展性。这里的度是很难把握的。高段位的棋手可以比低段位的棋手预见到更多的步数,而一个优秀的软件架构师也需要比普通的程序员更早的预见到系统发展的障
碍。在我们明确可预见的范围内,当然是要把所有的设计做好,而在我们思维的边界处,"行"就变得比"思"重要了。
大谈"over-engineering"的主多半都有着丰富的过度设计的经验,千万不要把他们回顾时的话语当成是普遍的真理。所谓大巧若拙,精炼的小诗
可比长篇大论难写的多了。有时采用一种简单的处理方式,是因为我们感觉到它不会成为障碍,虽然此时并没有明确的设计过程。你必须有能力进行过度设计,才能
真正理解简单设计的精妙之处