对设计模式的一些反思和探讨

10-03-30 kenWT823018
    

大家好,我是一个只有不到五年编码开发经验的java软件工程师。近日在老书新读中,对设计模式的认识有了点新的体会,在此和大家做一简单的交流和探讨。希望大家能共同进步。

凡是有几年开发经验的同仁,估计都对设计模式有一种模式化的崇拜,就连我的一位入行有十来年的经验的老大哥也是如此感叹,那二十三种设计模式,我到现在还没读完呢,没有彻底悟透...此话无疑对设计模式有了点神化的色彩。我也承认,深邃一种思想绝非三两天的功夫,但是思想是需要来领会的,为什么古人有心有灵犀一点通之说,其实学习,接受一些新的理念和思想,也是有它的方法的。在这里,我就直言直语,说说自己的一些感悟。

《Think in java》一书中有这么一句话,设计范式的最终目标就是将代码中变化的内容隔离开。请大家仔细揣摩这句话的意思, 范式的目的是要把变化隔离开,为什么要隔离开,因为它变化,变化的东西和不变的东西在一块工作,日后肯定是要出问题的。在现在企业 级的软件开发中,这个问题尤其敏感,为什么说现在做软件很难,难在什么地方,我个人的理解,就是难在需求的日益复杂和不确定性上,大家 辛辛苦苦搭好的架构,还没有达到预期的一半效果,却被告知需求发生了改变,而不得不寻求新的解决办法,言外之意,也许以前的大家的 种种努力都要付诸东流了,相信这样的情形,大家遇到的并不比我少。那么为什么会有这样的结果呢,它的元凶就是变化,正是有了新的变化 才直接或者间接导致了系统架构的崩溃或者重构,就是我们对变化没有一个充足的预计,事实上,我们也很难有理论上的充足预计,因为,任何人 都没有超前预见性的特异功能。我们生活中一个“动态的”世界里,变化之繁之频也就不足为奇了。

实际上,所有的设计模式也并非是包治百病的灵丹妙药,但问题是它的的确确是前人历史经验的一种高度总结和概括,前车之鉴我们绝对有 了解的必要。那么又该如何去学呢?才能真正领悟到它的精髓呢?从而学以致用呢,我认为,有必要反其道而行之,突破最核心的动机,其实 Think in Java的作者已经给我们道破了设计范式的根本动机,也就是说它能指导我们处理一些开发设计中所可能遇到的一些变化,遇到各种各样 的需要我们解决的或明朗或不明朗的一些变化,那么前人在遇到这些变化的时候,他们为了隔离这些变化做了些什么事情,有什么好的经验和思想, 其实这个就是设计范式。在此我还想补充一条,那就是范式产生的动机不仅仅是为了怎么怎么隔离各种各样的变化,更重要的是,我们应该如何如何预见这样那样的变化,我想这一点更加至关重要,只可惜这点,还需要我们实实在在地去积累和总结,发现问题的能力同样可贵。

简而言之,其实设计范式,我个人认为,大家没有必要感觉很深,很飘渺,其实任何一种思想都是有它的土壤的,有它的来源的和动机的,只有把握了这一点,我想我们去理解这些范式并非难事,不要认为思想很高深,对它敬而远之,如果这样的话,就太可悲了。

设计范式,它就是一个接口,一个标志,一个方向而已,就看我们怎么去活学活用了。再说的简洁点,一是发现变化,而是隔离变化。我个人认为这就是深入领悟设计范式的金钥匙吧。欢迎大家共同探讨和提高。本人能力有限,望广大同仁多多指正。不甚感激。

[该贴被admin于2010-03-30 20:37修改过]

    

3
banq
2010-03-30 20:40

写得不错,至少说出设计模式的必要性,为了应付更多变化,变化是对软件有致命杀伤力,如何能让软件变得更敏捷,更快适应变化,这些都是软件设计应该考虑的

xmuzyu
2010-03-30 20:50

呵呵,多谢分享心得。我觉的首先是高内聚,松耦合,其次是OO设计原则(单一职责,依赖倒置,里氏代换,开闭原则,接口隔离,组合优于继承,封装变化),再次设计模式。设计模式是采用一种迂回,间接的方式来解决问题。我觉得讨论设计模式最好能有一些场景比较好,单纯的讨论理论感觉讨论不出什么呵呵。

yidinghe
2010-03-31 08:23

我觉得先看《实现模式》再看《设计模式》会比较好。