前面一节的启发主要专注于设计的属性,也就是最终的设计是什么样的,这一节的启发则专注于设计的实践,即通过怎样的步骤可以得到好的结果。同样是启发式,所以也有各种各样的方法。
- 迭代。一般来说第二次的设计都会比第一次的好,而且我们会从每一次设计中学到东西,从而提高整体的设计水平。
- 分而治之,各个击破(Divide and Conquer)。人脑的容量,处理能力都有限,对于大的问题我们只能分层分块去处理来提高效率。自顶向下也好,自底向上也好,各有利弊,要灵活运用,不要一棵树上吊死。
- 原型实验(Experimental Prototyping)。有时候实在不知道一种设计是否可行,就需要做简单的原型实验来验证。这里一定要注意原型就是原型,是验证完就扔掉的代码,千万不要想着可以用在正式的项目中。如果那样想的话,设计原型的时候就会考虑太多,付出太多的时间和经历,增加成本,实际上并没有起到原型该起的作用。
- 合作设计。三个臭皮匠,顶个诸葛亮。不管是正式的也好,非正式的也好,聊天也好,开会也好,发邮件也好,跟帖子也好,总之,要集思广益。
- 设计做到什么程度算好?这个取决于很多个因素,包括文档的正式程度,开发团队的经验,开发的系统的预期寿命,所需的可靠性,安全性,项目的大小等等。
- 记录设计过程和结果。除了传统的写一个正式的设计文档以外,还有很多种其他的方法。比如把一些关键的设计决定放在代码的注释里,把讨论的论点和结果都放在一个Wiki上,发备忘的邮件,直接用相机拍下画在白板上的图或者讨论,用大的挂图来展示设计方案,用小的