GoF设计模式三作者15年后再谈模式

Erich Gamma, Richard Helm, 和 Ralph Johnson在GoF设计模式发表15年以后,再谈模式,另外一位作者,也是四色原型的发明者Peter已经过世。

提问者:如今有85,000 iPhone的小应用遍布全球,使用PHP就能够写一个简单的"Hello, World! The time is X"Web网页,那么,面向对象设计是难的,这句话是否还正确呢?

Richard Helm: 软件设计总是很难的,尽管大多数现代开发环境已经降低了复杂性,通过重用库和工具(Eclipse, Apple, Microsoft), 设计一个解决业务问题的软件依然是难的。

Erich Gamma: 是的,iPhone非常有趣. The iPhone SDK 是基于NeXTStep面向对象框架 object-oriented frameworks,如AppKit. 但我们15年前写GoF设计模式时就已经存在,也是驱动力之一.我们实际上已经在书中提到框架的几个模式: Adapter, Bridge, Proxy, and Chain of Responsibility.

提问者:是否可以表明好设计能够延长软件生命,它能够在不同技术形态中延续生存呢?

Ralph Johnson: 今天有时写一行代码也许就可以,软件经过多年已经提高很多,许多系统过去需要仔细的设计,今天已经能够被重用,但是还是还有一些系统写100K代码并不比15年前容易。它能实现更多功能,但是耗费也是同样的。

软件设计是难的,这正使它变得有趣,善于软件设计的人会从解决难问题中得到乐趣:将混乱变得秩序,克服困难。过去是难的事情现在变得容易,但是我们今天面临的问题是15年前不可能面临的,OO编程有帮助,但是不能消除设计的困难。


提问:关于重用,在90年代作为OO的主要好处,但是过去几年,很多程序员离开重用,开始使用框架,对于重用的观点变得:你不可能需要它, 那么是否重用还是今天开发这的主要目标呢?

Richard: 我认为在复杂层次有一个进化,重用软件已经演变成在系统语言层次,以框架和工具形式出现,大部分工作留给框架设计专家来实现。

....

Erich: 实际上,我补充的是,最难的是可重用面向对象软件的演进使用,比如 factories, adapters 和facades模式能够改变和演进一个可重用的库.。

.....

Ralph: 大多数程序员都不是被聘请为编写一个可重用的软件,但是你必须知道一个可重用的软件是如何工作的,我们的模式是重用软件的通用方式,如今他们还是有用的。

Erich: 我同意,但我学习iPhone SDK时,我注意到这些库非常熟悉,因为他们是我熟悉的模式。

提问者: 曾经有一段时间,每件事都是模式,有模式架构,组织行为,分析等等,如今是否有23种模式的拓展,比如架构模式,是否有新的设计模式关系图?


Ralph: 如果你的意思是我们是否有,回答是没有,如果你意思是是否有人做了新图,回答是有。
....


提问者:在模式热潮中,有一种反模式anti-patterns,你们是怎么看的。反模式是模式吗?

Richard: 有可能,他们提供了一种方法,分享他们犯过的错误。

Ralph: 我愿意使用这样概念"代码味道code smells," or "设计味道design smells"/"架构味道architecture smells"等等,他们并不总是错误. 有时他们实际就是你必须面临的问题, 比如"stove pipe"系统出现,部分是因为公司软件之间并没有一个好的互联通讯方式。 部分因为技术变化太快,部分因为公司之间不同架构,z增长快的公司收购了其他公司也造成,所以,并不是架构领导力的强度能够消除这个问题的

我的一些学生写了一个模式叫大泥球"Big Ball of Mud." 大部分知道这个模式的人知道它是一个反模式,但是一些IT组织的人,至少我看到过的,并不做得更好。

...


提问者:如今一些听到一些面向functional或dynamic语言者宣称他们的语言不需要模式,你们如何反应?

Erich: 需要注意的是,但我们写设计模式时,还没有Java和C#

Ralph: 这些语言不需要模式,是因为这些语言提供了一种解决问题的方式,我们的模式是对于语言C++ 和 Smalltalk,包括今天的大部分叫OO的语言, 当然不适合所有语言,我并不认为使用其他语言就不需要模式,只不过他们使用另外一种其实等同于模式的概念。

Erich: 设计模式最终融入任何语言. 尽管这些经验并不总是表达为模式,但是他们存在,Erlang的设计原理就是这样。

提问者:: 有关于dynamic 和面向功能functional语言的模式吗?

Ralph: 如果动态语言如Smalltalk, Ruby or Python, 那么我们的模式依然有效,. Functional性语言需要不同的模式,但是目前我不知道有谁发布。

提问者: OOP 提供一个静态和动态结构的结合,允许设计意图能在在不同流程中传达,今天强调面向功能和元编程, 有"domain-specific language" 或 "fluid interface流体接口" 这些概念和模式有什么区别和联系?

Richard: 是一种补充. 使用好设计的丰富的类图结构,可以获得DSL的特性和功能,库构成DSL的名词和动词。

Erich: 有的是补充设计模式,元编程能够替代设计模式, 例如JUnit 3 到JUnit 4演变是一个例子, JUnit 3 是一个使用Composite, Template Method 和Command等模式小框架. JUnit 4 导入Annotations meta-programming . 以前的模式使用就消失了,演变成一系列小的元注解。

....
其他不是非常重要的可见原文:Erich Gamma, Richard Helm, and Ralph Johnson talk to Larry O'Brien about Design Patterns, 15 years later.

[该贴被banq于2009-10-23 12:17修改过]

Banq是否搞错了?Peter还健在呢...
应该是John死了吧?

有可能,是我脑子混淆,我对人名很不擅长,谢谢了。

设计模式关系图初看有点象freemind。