GoF設計模式三作者15年後再談模式
提問者:如今有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修改過]
相關文章
- 設計模式_GoF設計模式Go
- GOF設計模式Go設計模式
- Rust語言之GoF設計模式: 模板方法模式RustGo設計模式
- Rust語言之GoF設計模式:原型模式RustGo設計模式原型
- Rust語言之GoF設計模式:迭代器模式RustGo設計模式
- Rust語言之GoF設計模式:工廠模式RustGo設計模式
- Rust語言之GoF設計模式:責任鏈模式RustGo設計模式
- Rust語言之GoF設計模式:中介者Mediator模式RustGo設計模式
- Rust語言之GoF設計模式:抽象工廠模式RustGo設計模式抽象
- 實踐GoF的23種設計模式:命令模式Go設計模式
- Rust語言之GoF設計模式:Flyweight享元模式RustGo設計模式
- GOF23--23種設計模式(一)Go設計模式
- Rust語言之GoF設計模式:備忘錄Memento模式RustGo設計模式
- 實踐GoF的23種設計模式:裝飾者模式Go設計模式
- Go語言實現GoF設計模式:介面卡模式Go設計模式
- 誰有GOF的設計模式電子版。Go設計模式
- GoF設計模式新手討論專用帖Go設計模式
- Rust語言之GoF設計模式: 直譯器Interpreter模式RustGo設計模式
- 談談設計模式~原型模式(Prototype)設計模式原型
- GoLang設計模式15 - 策略模式Golang設計模式
- 再談23種設計模式(2):結構型模式(趣圖解釋)設計模式圖解
- 再談23種設計模式(3):行為型模式(學習筆記)設計模式筆記
- 工廠方法模式GoF23種設計模式之建立型模式之工廠方法模式Go設計模式
- 談談設計模式 —— Iterator設計模式
- 【淺談設計模式(三)】讓你一分鐘讀懂設計模式設計模式
- [淺談設計模式(三)] 讓你一分鐘讀懂設計模式設計模式
- Rust語言之GoF設計模式:靜態工廠RustGo設計模式
- 老大,你看過GoF的設計模式沒有?Go設計模式
- 實話設計模式:GOF《設計模式》不適合作為初學者入門讀物設計模式Go
- 設計模式漫談之策略模式設計模式
- 淺談設計模式——工廠模式設計模式
- 淺談設計模式——單例模式設計模式單例
- 設計模式漫談之命令模式設計模式
- 設計模式漫談之代理模式設計模式
- 設計模式雜談設計模式
- 設計模式趣味談設計模式
- 設計模式(三)——原型模式設計模式原型
- JS設計模式三:模組模式JS設計模式