To raise new questions, new possibilities, to regard old problems from a new angle, requires creative imagination and marks real advance in science.
-- Albert Einstein
网络上对于Design Pattern有很多争议,许多争论是感情化的表达,而有些意见还是比较中肯的,怎么从这些口水战中,挑出最有价值的东西并加以吸收,是本文最关心的问题。
分析这个问题的可以从多个角度入手,包括
1. 软件设计本质的核心价值是什么? Design Pattern的核心能力是什么?
不管软件工程如何发展,系统的复杂性如何增长,其核心价值40年来并未有什么实质的变化,具体罗列如下:
- 软件必须能够解决现实中需要解决的问题,达成设计的初衷。
- 可维护性,能够最小成本完成维护
- 能偶一定程度预测未来的变化,并且在架构上能容易适应这些变化。
原理上来说,Design Pattern认可并且支持这些价值观,
2. Design Pattern对于软件工程做了哪些贡献?
- 作为一种沟通工具和软件行业语言:Design Pattern系统化的命名和良好的模型抽象,使得一般的程序员也能容易理解。随着Design Pattern概念的普及,带来了软件工程师之间的沟通效率的提高,如果没有Design Pattern,可能描述一个结构概念需要讲几百个字,而现在只需要提几个字,就能让听众理解十之八九。
- 作为软件开发的过程优化方法:软件开发的本质是一个“重复性过程”(Recurring Process),相同的“子规则”,“微结构”和“子功能”,总是不断的在各种软件中重复。不排除各个行业之间的不同,比如Photo Shop要解决的问题一定与Star Craft不同,但除去程序应用逻辑的不同,如果分解到函数实现的底层,两者并没有本质不同。从宏观的软件开发过程来看,设计就是根据待解决问题的特点和应用场景,将已有的“子规则”,“微结构”和“子功能”定制化,使其组合起来能解决具体的实践问题。Design Pattern总结出这些“微结构”和“子规则“,将其标准化和通用化,并提供例子和提示,帮助开发者更好的应用于面向对象的设计和开发实践活动中。
3. Design Pattern能解决哪些问题,不能解决哪些问题?
任何事物都有它的局限,有些局限是主观设计时被排除在外,有些局限是客观因素所制约。
这部分内容留待下一节来讨论。