国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

對于模式的“十大誤解”

2019-11-18 15:06:15
字體:
供稿:網(wǎng)友

  【譯者語】現(xiàn)在“模式”這個詞真是非常流行。就象任何流行的東西一樣,對它的誤解也真是不少。甚至在一些發(fā)表出來的文章中,也存在著各種各樣的誤解, 我想這會對讀者造成非常糟糕的引導作用。早已想寫一篇文章來澄清一些對模式的誤解,卻又因為水平所限難以成文。恰在此時, 我看到John Vlissides先生的《十大誤解》,于是我便樂得當文抄公了。

????關于設計模式,下面有十種錯誤的觀點??很多都是很流行的觀點。且看Vlissides先生如何撥開這些迷霧。

????最近,圍繞著模式的討論日囂塵上,人們對模式的混淆、驚惶和以訛傳訛已經(jīng)不是一點半點。這也從一個側(cè)面反映出對于主流軟件開發(fā)者來說,模式是一個多么新鮮的領域??盡管嚴格說來,它并不是一個新的領域。同時,模式也是一個飛速發(fā)展的領域,留下了大片的空白。而且,沒錯,我們這些模式的支持者也應該受批評,因為我們沒有把自己的知識完完全全的教給別人。盡管我們這樣想過,但是卻沒有這樣做[BMR+96, Coplien96, CS95, GoF95, MRB98, VCK96]。

????因此,我覺得自己有責任來糾正一些模式方面越來越夸張的誤解??我經(jīng)常聽到的那些誤解都足以形成自己的模式了。甚至連我也曾經(jīng)想以模式來組成自己的軟件結(jié)構……后來我才明白:“把所有的東西都變成模式”,這種想法本身就是錯誤的!總之,請記住,這篇文章不是在給模式社群的人們看的。我想,絕大多數(shù)的模式專家都會同意:下面這些都是很常見的誤解。但是他們也許不會同意我消除這些誤解的方式。

????這幾年以來,我聽到過許多人談論模式。把聽到的這些東西整理一下,對模式的誤解大概有三類:對于“模式是什么”的誤解,對于“模式可以做什么”的誤解,以及對于支持模式的人群的誤解。我的“十大誤解”都落入這三類之中,所以我就把這些誤解都組織起來。首先,我們來看看關于“模式是什么”的誤解。

????誤解之一:“模式是某種場景下某個問題的解決方案”

????這個定義來自于Christopher Alexander[AIS+77],所以假如把它稱為“誤解”,也許有人會把我目為異端。但是下面這個簡單的反例就能讓你看清它的缺點:

????問題:我獲獎的獎券就快過期了,我怎樣拿到獎金?
????場景:離截止時間只有一小時,可是我家的小狗把獎券給吞了。
????解決方案:把狗開膛破肚,掏出獎券,然后飛奔到最近的兌獎地點。

????這是“某種場景下某個問題的解決方案”,但它不是模式。還缺了什么?至少缺三樣東西:

????1. 可重復性。解決方案應該對應于外部的場景。
????2. 可傳授性。一個解決方案應該可以移植到問題的不同情況上。(絕大多數(shù)模式的可傳授性都建立在“約束”和“效果”的基礎上。)
????3. 用來表示這個模式的名稱。

????確實,很難找到一個令人滿足的定義。“模式討論”郵件列表(patterns-discussion@cs.uiUC.edu)上正在進行的討論也證實了這一點。難以定義的一大原因是:模式既是一個事物,也是對類似事物的描述。要區(qū)分這兩者,有一種辦法:“模式”這個術語只用來指代模式的描述,同時用“模式實例”來指代模式的具體應用。

????但是,術語的定義很可能是白費力氣,因為一個定義可能對一個人(比如程序員)有意義,但是對另一個人(比如只能看到書面材料的項目主管)卻毫無意義。當然,我不打算在這里提出什么最終定義。但是,任何對模式要素的規(guī)定,除了必須包括問題、解決方案和場景之外,都必須提及可重復性、可傳授性和名稱。

????誤解之二:“模式就是行話、規(guī)則、編程技巧、數(shù)據(jù)結(jié)構……”

????我通常把這些誤解統(tǒng)稱為“蔑視”。假如你試圖把某些不熟悉的東西簡化為熟悉的東西,產(chǎn)生這種想法是很自然的,尤其是當你沒有非凡的愛好去鉆研這些不熟悉的東西時。另外,某些人經(jīng)常拿新瓶裝陳酒,然后大吹“創(chuàng)新”、“革命”一類的口號。保持警惕也是好的。

????但是,這種蔑視通常不是來自親身體驗,而是來自膚淺的熟悉和一點點冷嘲熱諷的。而且,沒有什么東西是真正“全新”的。人們的腦海中一直都存在著各種各樣的模式,只不過我們現(xiàn)在剛開始為模式命名、將模式記錄下來。

????來逐個說明這些看法:的確存在著模式的行話,例如“模式”這個詞,例如“約束”,例如Alexander的“無名質(zhì)量”,等等。但是模式是不能簡化為行話的。與其他計算機科學領域相比,模式引入的新術語實在是少得可憐。對于聽眾來說,好的模式本來就很輕易接受。在說明一個模式的時候也許有必要引用問題領域的行話,但是幾乎沒有必要使用什么特定于模式領域的術語。

????沒有哪個模式是能讓你不假思考就使用的規(guī)則(組件則正好相反),同時模式也不僅僅是“編程技巧”,盡管模式中的“方言(idiom)” 部分是特定于語言的。在我聽來,“技巧”這個詞帶有輕視的意思,并且過分強調(diào)解決方案,而忽視了問題、場景和名稱的重要性。

????毫無疑問,你也曾經(jīng)聽說過一次創(chuàng)新被接受的三個階段:首先,它被當作垃圾扔在一邊;然后,人們會認為它不具可實施性;最后,大家都明白它的意義時,它也沒有意義了??“我們一直都這樣做”。現(xiàn)在,模式還沒有完全走出第一個階段。

????誤解之三:“理解一個,就理解了全部”

????一刀切的規(guī)則往往是不公平的,而人們對模式卻更加一刀切。模式的領域、內(nèi)容、范圍、形式、質(zhì)量……這個領域大得嚇人,只需要隨手翻翻PLoP 的書[CS95, MRB98, VCK96]就能看出。不同的人寫出不同的模式,而模式的變化甚至比作者還要多。象Alistair Cockburn、Jim Coplien、Neil Harrison 和Ralph Johnson 這樣的作者已經(jīng)超越了最初大量記錄不同領域、不同形式模式的階段。只看幾個例子就對模式做一個籠統(tǒng)的結(jié)論,這樣的結(jié)論必定是錯誤的。

????誤解之四:“模式需要有工具或方法學的支持才會有效”

????在過去的五年中,我記錄、使用并且?guī)椭渌耸褂媚J剑€至少幫助完成了一個基于模式的工具[BFV+96],所以我可以很有把握的說:模式的絕大多數(shù)好處都來自于原封不動的使用??也就是說,沒有任何形式的外部支持。

????在談到這個主題的時候,我通常會指出模式帶來的四大好處:

????1. 它們記錄了專家的經(jīng)驗,并且讓非專家也能理解。
????2. 它們的名稱構成了一份詞匯表,幫助開發(fā)者更好的交流。
????3. 它們幫助人們更快的理解一個系統(tǒng)??只要這個系統(tǒng)是用模式的方式描述的。
????4. 它們使系統(tǒng)的重組變得更輕易,不管原來的系統(tǒng)是否以模式的方式設計的。

????過去,我一直認為第一項是模式最大的好處。現(xiàn)在我熟悉到,第二條起碼也同樣重要。請想一想,在一個開發(fā)項目的過程中,有多少字節(jié)的信息在開發(fā)者之間流動(包括口頭的和電子的)?我猜就算沒有1G也有好幾兆。(在推出了《設計模式》之后,我已經(jīng)收到了好幾十兆給GoF的電子郵件。而且我們所描述的還都是小型到中型的軟件開發(fā)項目。)由于有如此之大的信息交流量,所以效率上任何微小的提升都能大量節(jié)約時間。在這個意義上,模式拓寬了人們交流的帶寬。我對第三、四條的評價也在逐漸提高,非凡是在項目越來越大、軟件生存周期越來越長的今天。

????至少在短期內(nèi),模式主要存在于大腦中,而不存在于工具中。假如有了方法學或自動化工具的支持,應該還有其他的收益,但是我相信這些都只是蛋糕上的奶油,而不是蛋糕本身,甚至都不能算蛋糕的一層。

* * *

????到目前為止,我說到的誤解都是關于“模式是什么”的。現(xiàn)在來看看關于“模式可以做什么”的誤解。這里有兩種不同的風格:夸大其詞的和心存疑慮的。

????誤解之五:“模式可以保證軟件的復用性、更高的生產(chǎn)力、世界的和平……”

????道理很簡單,模式什么都不保證。它們甚至有可能無法給你帶來利益。在創(chuàng)造新事物的過程中,模式無法取代人的位置。它們只是帶來一種希望,有可能讓一個缺乏經(jīng)驗的、甚至是未入門的,但是有能力、有創(chuàng)造性的人盡快獲得設計的能力。

????人們經(jīng)常說:好的模式會讓讀者有“啊!”的回應。實際上,只有當模式恰好撥動了讀者的某一根心弦時,他們才會有這樣的反應。假如沒有,模式就只象森林里普通的一棵樹。因此,什么是好的模式?不管它寫得有多好,假如不能引起讀者的共鳴,它又怎能算是好的模式?

????模式只是開發(fā)者的工具箱中的另一件工具,對模式寄以過高的期望只會適得其反。預備充分,然后做最壞的打算??這就是防止受騙、消除對抗最好的方法。

????誤解之六:“模式可以‘生成’整個軟件體系”

????這個誤解與上一個有點相似,不過侵略性稍微少些。

????每過一段時間,模式論壇上就會討論一次模式的生成能力。按照我的理解,“生成能力”是指模式創(chuàng)建最終行為的能力。很多人認為,模式可以幫助讀者解決模式本身沒有明確提出的問題。我讀過的一些書里也有同樣的觀點。

????對于我來說,“生成能力”的要害是模式的可傳授性??約束及其解決,或者對于效果的討論。在你定義、精煉一個體系結(jié)構時,這些觀察是非凡有用的。但是模式本身并不制造任何東西??任何東西都是由人來制造的。而且,模式不可能覆蓋體系結(jié)構的每個方面。給我任何一個有實際價值的設計,我都能找出其中模式?jīng)]有涉及的設計問題。也許這些問題不常見、不具可重復性,或者只是還沒有以模式的形式記錄下來。不管怎樣,你都必須負責填補模式之間的空白??用你自己的創(chuàng)造性。

????誤解之七:“模式是針對(面向?qū)ο螅┰O計或?qū)崿F(xiàn)的”

????另一個極端則是過分的限制,就象這個誤解。坦白說,任何人都完全可能相信它,我不會有絲毫驚奇。無數(shù)的人問過我這個問題,所以它也進入了“十大誤解”之列。假如你覺得這種觀點實在天真幼稚,跳過這一部分吧。

????假如模式不能記述專家的經(jīng)驗,那它們就什么都不是。對于模式的作者來說,任何形式的專家經(jīng)驗都是可記載的。當然,在面向?qū)ο筌浖O計中有值得記載的經(jīng)驗,但是在非面向?qū)ο笤O計和分析、維護、測試、文檔、組織結(jié)構……這些方面也同樣有值得記載的經(jīng)驗。現(xiàn)在,不同領域中的模式開始浮出水面。至少已經(jīng)有兩本關于分析模式的書[Fowler97, Hay96],并且每次PLoP大會都會收到新的模式類型。(非凡有趣的是1996年的PLoP大會甚至關注了音樂作曲的模式!)

????和大多數(shù)的誤解一樣,這個誤解也是有原因的。看看人們用來描述模式的格式,有兩種基本的風格:描述高層結(jié)構的GoF風格(用于《設計模式》中);接近文學的Christopher Alexander 風格??敘述性的,盡量少的結(jié)構圖。由于已經(jīng)用模式描述了面向?qū)ο笤O計之外的東西,所以我現(xiàn)在熟悉到GoF風格造成的偏差。對于我研究過的某些領域的專家經(jīng)驗,這種風格根本無法描述。為什么結(jié)構圖看上去總是讓人聯(lián)想到C++?對于音樂作曲的模式,“實現(xiàn)”應該是什么?“協(xié)作”部分真的有意義嗎?

????很明顯,一種格式不能適應所有的需求。比較具有普遍意義的是模式的概念:模式是記載并傳達專家經(jīng)驗的工具??不論是哪個領域的專家經(jīng)驗。

????誤解之八:“沒有證據(jù)表明模式幫助過任何人”

????這種觀點曾經(jīng)有一定的說服力,但是現(xiàn)在已經(jīng)沒有了。在Software-PRactice and EXPerience[Kotula96]這樣的雜志上、在OOPSLA[HJE95, Schmid95]和ICSE[BCC+96]這樣的會議上,人們不斷的報告自己從模式得到的利益。Doug Schmidt已經(jīng)清楚的說明了在傳授計算機科學時使用模式的收益[PD96]。盡管絕大多數(shù)的證據(jù)都只是定性的,但是據(jù)我所知,至少有一個組織得到了一些定量的結(jié)論[Prechelt97,PUS97]。

????隨著時間推進,我們需要更好的把握使用模式的好處和缺點。盡管最初的反饋已經(jīng)讓我們看到了希望,但是我們還需要更多的實踐經(jīng)驗來做全面的估計。但是,假如僅僅因為模式的好處還沒有完全證實就拒絕使用模式,那你就真的是個大傻瓜了。

* * *

????關于“模式能干什么”的謬論還真不少。下面,最后兩種誤解不是關于模式本身,而是關于支持使用模式的人們的。

????誤解之九:“模式社群是精英的小圈子”

????我很想知道這種觀念到底是從哪里來的。假如說模式社群的人們有什么引人注目的地方,那就是他們之間巨大的差異。從PLoP大會的與會者名單就能看出??人們來自世界各地,有大公司的也有小公司的,有分析員、設計者和實現(xiàn)者,有學生也有教授,有大名鼎鼎的作者也有初出茅廬的菜鳥。更讓我驚奇的是,竟然有不少與會者都不是計算機科學工作者!這個社群仍然在不停變化,每年的與會者名單都與前一年不同。

????假如將模式社群的背景公開出來,別人也許會覺得希奇:很少有學院派人士。實際上,絕大多數(shù)PLoP的與會者都是實踐者。軟件模式早期的推崇者??包括Kent Beck、Peter Coad 和Ward Cunningham??都沒有學院背景。GoF中只有一個人(Ralph)是學院派,而且他也是我所熟悉的最實際的學院派。很明顯,模式社群從根本上反對任何可能的宗派主義和精英論。

????誤解之十:“模式社群是自私的,甚至是陰謀家”

????我不止一次的聽人指責說:模式最大的用處就是為寫模式書籍的人帶來了源源不斷的收入。他們甚至還暗示模式的發(fā)展有著某種邪惡的目的。

????胡說八道!

????作為GoF的一員,我可以肯定的告訴你:對于《設計模式》引起的反響,我們和其他任何人一樣吃驚。對于它在OOPSLA 94上的初次亮相引起的暴風驟雨,我們也同樣沒有預備??甚至出版商都沒有預料到會有這么大的銷量。在整個寫作過程中,我們最關心的就是盡量寫出一本高質(zhì)量的書,至于銷售上的問題,我們根本沒有時間去想。現(xiàn)在“模式”已經(jīng)成了一個時髦的詞匯,不可避免的會有一些人將這個詞用來謀取私利。但是,假如你認真讀過頂尖的模式作者的作品,你就會感覺到他們共同的目標:將難以獲取的經(jīng)驗、最佳的實踐、甚至是競爭中的優(yōu)勢??多年實踐經(jīng)驗的累積??分享給讀者,而且講解得一清二楚。正是這種幫助讀者的熱情激勵著每一個真誠而踏實的模式作者。假如沒有這種熱情,作者就會弄巧成拙??這種不負責任的作者往往正是對模式所有誤解的根源!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 荔波县| 孝昌县| 沂水县| 淳化县| 明溪县| 惠安县| 武乡县| 定西市| 内黄县| 札达县| 铁力市| 德昌县| 镇沅| 景德镇市| 台中县| 蛟河市| 叙永县| 双柏县| 龙川县| 永丰县| 开原市| 新巴尔虎左旗| 澄迈县| 利津县| 佛学| 永善县| 远安县| 沈阳市| 湘阴县| 同德县| 安吉县| 万宁市| 桑日县| 普洱| 井研县| 盐池县| 扶风县| 灵川县| 宝丰县| 勃利县| 海门市|