Teaser Image

mindwind

十日画一水,五日画一石




「曾经,设计模式被捧为圣经,奉为圭臬。设计模式之觞下的一些程序员,终将沦为‘丧尸’。」

最近读《编程人生》采访 Jamie 谈到有关对 “设计模式” 的看法,Jamie回答:

有本书叫《设计模式》,人人追捧,奉为圭臬。
许多人都对这书着了魔,参加各种会议时,他们嘴里不时蹦出从书中读到的术语。
比方说,反转-翻转-两次后空翻模式,简直一派胡言。

我们都知道,设计模式这本书里没有什么“两次后空翻模式”。 Jamie只是在讽刺那些拿着这本“配方书”,找几个相近的模式,套着用就以为是设计和编程的人。

我在读书时,刚接触面向对象编程,有老师推荐《设计模式》这本书,我当时也读了。 然后在课程实践中总是想方设法的去套用更多的模式,以体现程序的设计感。 如今想来十分可笑,所以在看到Jamie有关设计模式这段评价后不禁莞尔。 《设计模式》像一本菜谱,从来没做过什么菜的人才需要经常去看菜谱,然后照猫画虎。 有过照着菜谱做菜的经历,会看到这样的描述: “将瘦肉切成约5厘米长、2.5厘米宽、0.3厘米厚的大薄片,锅里倒入30克油 ,烧热后翻炒5分钟等等。” 然后我们便不知所措了,因为5厘米、30克、5分钟这种描述实在太难掌握了。 厨师有一种能力叫火候、设计和编程也同样,没有大量的思考与实践你没法从一本薄薄的“配方书‘中学到真正解决问题的方法。

这又让我想到了面试时,都喜欢问设计模式问题,如今模式基本已经固化在很多成熟的开源框架中。 例如流行的ssh框架,spring固化了单例、工厂等模式、struts固化了命令模式、hibernate固化了适配器模式等等。 即使刚毕业的学生按照这些固定的编程框架也能写出符合规范模式的程序,但了解这些模式和真正的设计编程差距甚远。

正如从没有大厨看着菜谱去制作满汉全席的,真正的大师也不会套着模式去设计编程。 模式是前人解决某类问题方式的总结,合理与否在于你对问题域的判断,重点在问题域而非方式。 设计的中心永远是问题域的界定,才是方式的取舍与平衡。 当你解决了一个前人从没有解决的问题时,你走过的路,后来的追随者会给它起个名字 “XX模式”。