对于模式的“十大误解”

2008-02-23 09:41:41来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

??【译者语】现在“模式”这个词真是非常流行。就象任何流行的东西一样,对它的误解也真是不少。甚至在一些发表出来的文章中,也存在着各种各样的误解, 我想这会对读者造成非常糟糕的引导作用。早已想写一篇文章来澄清一些对模式的误解,却又因为水平所限难以成文。恰在此时, 我看到John Vlissides先生的《十大误解》,于是我便乐得当文抄公了。

??关于设计模式,下面有十种错误的观点——很多都是很流行的观点。且看Vlissides先生如何拨开这些迷雾。

??最近,围绕着模式的讨论日嚣尘上,人们对模式的混淆、惊惶和以讹传讹已经不是一点半点。这也从一个侧面反映出对于主流软件开发者来说,模式是一个多么新鲜的领域——尽管严格说来,它并不是一个新的领域。同时,模式也是一个飞速发展的领域,留下了大片的空白。而且,没错,我们这些模式的支持者也应该受批评,因为我们没有把自己的知识完完全全的教给别人。尽管我们这样想过,但是却没有这样做[BMR 96, Coplien96, CS95, GoF95, MRB98, VCK96]。

??因此,我觉得自己有责任来纠正一些模式方面越来越夸张的误解——我常常听到的那些误解都足以形成自己的模式了。甚至连我也曾经想以模式来组成自己的软件结构……后来我才明白:“把所有的东西都变成模式”,这种想法本身就是错误的!总之,请记住,这篇文章不是在给模式社群的人们看的。我想,绝大多数的模式专家都会同意:下面这些都是很常见的误解。但是他们也许不会同意我消除这些误解的方式。

??这几年以来,我听到过许多人谈论模式。把听到的这些东西整理一下,对模式的误解大概有三类:对于“模式是什么”的误解,对于“模式可以做什么”的误解,以及对于支持模式的人群的误解。我的“十大误解”都落入这三类之中,所以我就把这些误解都组织起来。首先,我们来看看关于“模式是什么”的误解。

??误解之一:“模式是某种场景下某个问题的解决方案”

??这个定义来自于Christopher Alexander[AIS 77],所以如果把它称为“误解”,也许有人会把我目为异端。但是下面这个简单的反例就能让你看清它的缺点:

??问题:我获奖的奖券就快过期了,我怎样拿到奖金?
??场景:离截止时间只有一小时,可是我家的小狗把奖券给吞了。
??解决方案:把狗开膛破肚,掏出奖券,然后飞奔到最近的兑奖地点。

??这是“某种场景下某个问题的解决方案”,但它不是模式。还缺了什么?至少缺三样东西:

??1. 可重复性。解决方案应该对应于外部的场景。
??2. 可传授性。一个解决方案应该可以移植到问题的不同情况上。(绝大多数模式的可传授性都建立在“约束”和“效果”的基础上。)
??3. 用来表示这个模式的名称。

??确实,很难找到一个令人满意的定义。“模式讨论”邮件列表(patterns-discussion@cs.uiuc.edu)上正在进行的讨论也证明了这一点。难以定义的一大原因是:模式既是一个事物,也是对类似事物的描述。要区分这两者,有一种办法:“模式”这个术语只用来指代模式的描述,同时用“模式实例”来指代模式的具体应用。

??但是,术语的定义很可能是白费力气,因为一个定义可能对一个人(比如程序员)有意义,但是对另一个人(比如只能看到书面材料的项目主管)却毫无意义。当然,我不打算在这里提出什么最终定义。但是,任何对模式要素的规定,除了必须包括问题、解决方案和场景之外,都必须提及可重复性、可传授性和名称。

??误解之二:“模式就是行话、规则、编程技巧、数据结构……”

??我通常把这些误解统称为“蔑视”。如果你试图把某些不熟悉的东西简化为熟悉的东西,产生这种想法是很自然的,尤其是当你没有特别的兴趣去钻研这些不熟悉的东西时。另外,某些人经常拿新瓶装陈酒,然后大吹“创新”、“革命”一类的口号。保持警惕也是好的。

??但是,这种蔑视通常不是来自亲身体验,而是来自肤浅的认识和一点点冷嘲热讽的。而且,没有什么东西是真正“全新”的。人们的脑海中一直都存在着各种各样的模式,只不过我们现在刚开始为模式命名、将模式记录下来。

??来逐个说明这些看法:的确存在着模式的行话,例如“模式”这个词,例如“约束”,例如Alexander的“无名质量”,等等。但是模式是不能简化为行话的。与其他计算机科学领域相比,模式引入的新术语实在是少得可怜。对于听众来说,好的模式本来就很容易接受。在说明一个模式的时候也许有必要引用问题领域的行话,但是几乎没有必要使用什么特定于模式领域的术语。

??没有哪个模式是能让你不假思索就使用的规则(组件则正好相反),同时模式也不仅仅是“编程技巧”,尽管模式中的“方言(idiom)” 部分是特定于语言的。在我听来,“技巧”这个词带有轻蔑的意思,并且过分强调解决方案,而忽视了问题、场景和名称的重要性。

??毫无疑问,你也曾经听说过一次创新被接受的三个阶段:首先,它被当作垃圾扔在一边;然后,人们会认为它不具可实施性;最后,大家都明白它的意义时,它也没有意义了——“我们一直都这样做”。现在,模式还没有完全走出第一个阶段。

??误解之三:“理解一个,就理解了全部”

??一刀切的规则往往是不公平的,而人们对模式却更加一刀切。模式的领域、内容、范围、形式、质量……这个领域大得吓人,只需要随手翻翻PLoP 的书[CS95, MRB98, VCK96]就能看出。不同的人写出不同的模式,而模式的变化甚至比作者还要多。象Alistair Cockburn、Jim Coplien、Neil Harrison 和Ralph Johnson 这样的作者已经超越了最初大量记录不同领域、不同形式模式的阶段。只看几个例子就对模式做一个笼统的结论,这样的结论必定是错误的。

??误解之四:“模式需要有工具或方法学的支持才会有效”

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:[学习笔记]快速开发Hibernate

下一篇:J2ME学习过程中的一点心得整理(参考:java手机/PDA程序设计入门