我有一段时间曾经认为GoF的DP除了在做Framework时以外,用处不大,结果在DFW上碰到一个自称是李维弟弟的人的教诲。
后来我又认为:只有MVC这样的模式才能算是设计模式,而GoF的DP充其量只能算是编码模式。
然而在看了Christopher.Alexander的书以后,我才算有一点明白GoF了。Alex说:模式语言!不错,模式是一种语言,不论是MVC还是GoFDP,都是模式语言的不同层面(不论是“设计”模式还是“编码”模式)。而语言有一点很重要的就在于:它包括元素和规则两个方面。
两年前,GIGIX在《探寻软件的永恒之道》一文中说过:
正是因为缺乏必要的背景知识,中国开发者对模式的了解往往是片面的甚至是错误的。如果把模式仅仅视为一种解决方案、或者一种反复出现的情况的总结,那么它顶多只对软件开发有一定的帮助或者指导意义;如果只把模式作为预先(up-front)设计的方案,它甚至会导致过分工程(over-engineering)。
所以我尝试去看Alex,去了解GoFDP的背景知识。现在我知道了,如果模式是一种语言,GoF的DP就是一本字典。一个人如果只是把一本《新华字典》全背下来,也是不可能成为一名优秀的作家的。
其实软件开发的模式语言存在于我们写的每一个程序的每一行代码中。而每个人都有自己的模式语言,这是超越编程语言的一种思想,没有它,我们就不可能写出一行代码。
然而为什么有的人写的东东就是好,有的却不怎么样?Alex说:模式分为好的模式与坏的模式。GoF就是把最常用的好模式整理出来,编成这本字典供大家使用。然而,这里只有“元素”而已,更多的“规则”还需要在应用中不断地学习和体会。