zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    257. Binary Tree Paths
    324. Wiggle Sort II
    315. Count of Smaller Numbers After Self
    350. Intersection of Two Arrays II
    295. Find Median from Data Stream
    289. Game of Life
    287. Find the Duplicate Number
    279. Perfect Squares
    384. Shuffle an Array
    E
  • 原文地址:https://www.cnblogs.com/haore147/p/7182536.html
Copyright © 2011-2022 走看看