模式十大誤解

      網(wǎng)友投稿 944 2022-05-30

      模式引起大家強(qiáng)烈的興趣的同時還伴隨著一些迷惑、詫異和誤解。這在一定程度上體現(xiàn)了主流軟件開發(fā)人員認(rèn)為這個領(lǐng)域有多么新,雖然從嚴(yán)格意義上說,它并不是一個新領(lǐng)域。這個領(lǐng)域的快速發(fā)展,也造成了一些空白。作為模式的倡導(dǎo)者,我們對此負(fù)有一定的責(zé)任:我們雖然一直努力讓大家理解和接受模式,但是工作并不徹底。

      為此,我感覺自己有義務(wù)來糾正那些對模式比較明顯的誤解,這些誤解我常常耳聞,甚至可以自成模式了。我甚至還開玩笑地采用模式的形式來表述它們……直到那一刻我幡然醒悟:將任何事物都?xì)w納為模式,這種行為本身就是對模式的一種誤解!無論如何,請記住我并不是代表模式社區(qū)在發(fā)言。雖然我認(rèn)為大多數(shù)模式專家都會同意這些是對模式最常見的誤解,但就如何消除這些誤解而言,他們的意見可能會與我的相左。

      這些年人們對模式眾說紛紜,令我反復(fù)思考,眾多誤解不過分為三類:一類有關(guān)模式是什么,一類有關(guān)模式能夠做什么,還有一類有關(guān)一直以來在推動模式的社區(qū)。我所列舉的“十大”誤解都可以被歸到這三類中。因此,我會將它們分門別類。首先來看看關(guān)于模式是什么的誤解。

      這是Christopher Alexander的定義,因此把它算作一種誤解可能會顯得有些離經(jīng)叛道。但下面這個反例應(yīng)該能夠顯露出它的不足。

      問 題:

      場 合:

      解決方案:

      雖然這是在一種場合下對一個問題的解決方案,但它并不是一個模式。那它缺少了什么呢?至少需要三樣?xùn)|西。

      (1)再現(xiàn)(recurrence),這使得該解決方案不僅與當(dāng)前場合下的問題有關(guān),而且與當(dāng)前場合之外的問題也有關(guān)。

      (2)教學(xué)(teaching),這將教會我們?nèi)ダ斫庠鯓訉鉀Q方案加以完善,從而適應(yīng)問題的變體。(對實際使用的模式來說,與教學(xué)有關(guān)的大部分內(nèi)容都包含在對問題的描述、對解決方案的描述以及應(yīng)用模式后得到的結(jié)果中。)

      (3)一個用來指代模式的名字。

      誠然,一個令所有人都滿意的定義是很難找到的,從“pattern-discussion”郵件列表(即patterns-discussion@cs.uiuc.edu)中持續(xù)的爭論可略知一二。其中的困難在于,模式既是事物又是對相似事物的描述。區(qū)分兩者的一種方法是,統(tǒng)一使用術(shù)語模式來表示描述,用模式實例來表示對模式的具體運用。

      對模式的十大誤解

      但是,定義術(shù)語可能只是徒勞無功,因為一個定義也許對一部分受眾(如程序員)有用,但對另一部分受眾(比如掌管公司財政大權(quán)的執(zhí)行官)來說卻毫無意義。當(dāng)然,我也不會嘗試在這里給出一個最終的定義。我只想說,任何一個規(guī)定模式的組成要素的定義,除了要討論問題、解決方案和場合之外,還必須涉及再現(xiàn)、教學(xué)以及命名。

      我稱這種誤解為“不以為然”。誠然,將不熟悉的事物歸納成已知的事物對我們來說是一件很自然的事情,尤其是在我們沒有興趣對不熟悉的事物進(jìn)行深入研究的時候。再者,用新瓶裝舊酒并號稱創(chuàng)新的事情我們已經(jīng)屢見不鮮了。保持警惕是應(yīng)該的。

      然而,“不以為然”并沒有經(jīng)驗依據(jù),很多時候它只是基于表面相似性的一種看法,還摻和些許輕視的態(tài)度。此外,從來沒有什么東西是全新的,其實自從每個人出生起,各種模式就已經(jīng)存在于他們的腦子里了。新的只是我們開始對模式進(jìn)行命名并把它們記載下來。

      來看看上面這句話。事實上的確存在一些模式行話,比如“模式”(pattern)本身、“推動力”(force)、Alexander的“無名的品質(zhì)”(quality without a name),等等。但我們很難把模式簡單歸納成行話。與計算機(jī)科學(xué)中的大多數(shù)領(lǐng)域相比,模式幾乎沒有引入什么新術(shù)語。事實上這是模式的特征,一個好的模式天生就很容易為它的受眾所理解。雖然模式可能會用到它所面向的目標(biāo)領(lǐng)域的行話,但我們幾乎不需要為模式定義專門的術(shù)語。

      模式不是可以盲目應(yīng)用的規(guī)則(否則有悖于模式的教學(xué)特性)。模式也不僅僅是編程技巧,雖說“慣用法”關(guān)注的是與特定的編程語言有關(guān)的模式。“技巧”在我聽起來有些貶義,它過分強(qiáng)調(diào)了解決方案,而忽略了問題、場合、教學(xué)以及命名。

      毫無疑問,一項新事物要被接受會經(jīng)歷三個階段:第一個階段,它被當(dāng)作垃圾,無人問津;然后它好像是不可行,無法推廣;最后它變得顯而易見,理所當(dāng)然,人們會說:“我們一直以來都是這么做的。”模式目前還沒有完全脫離第一階段。

      在過去的5年中,我曾經(jīng)編寫過模式,使用過模式,并幫助過別人使用模式,也參與設(shè)計過至少一個基于模式的工具。我可以很有把握地說,模式的優(yōu)點來自于對模式本身的應(yīng)用,也就是說不需要任何形式的支持。

      當(dāng)我在談?wù)撨@個話題的時候,我通常會指出模式的4個主要優(yōu)點。

      (1)它們提煉出專家的經(jīng)驗和智慧,為普通開發(fā)人員所用。

      (2)它們的名字組成了一個詞匯表,有助于開發(fā)人員更好地交流。

      (3)系統(tǒng)的文檔若記載了該系統(tǒng)所使用的模式,則有助于人們更快地理解系統(tǒng)。

      (4)它們使得對系統(tǒng)進(jìn)行改造變得更加容易,無論系統(tǒng)原來的設(shè)計是否采用了模式。

      長久以來我原本認(rèn)為大部分的優(yōu)點來自第1點。現(xiàn)在我認(rèn)識到第2點的重要性不亞于第1點。想一想:在軟件開發(fā)的過程中,開發(fā)人員之間的口頭及電子形式的交流的信息量有多少字節(jié)?我猜即使沒有幾吉字節(jié),也有好幾兆字節(jié)。交流如此多耗時自然多,任何有助于提高交流效率的東西都將為我們節(jié)省相當(dāng)可觀的時間。因此,模式使人與人之間的交流更順暢高效。隨著軟件開發(fā)項目的規(guī)模變得越來越大,軟件的壽命變得越來越長,我對第3點和第4點的重視程度也在不斷提高。

      簡而言之,模式是供大腦消化吸收的食糧,而不是供工具加工的材料。方法論和自動化的支持對模式可能會有好處,但我相信這些都只是錦上添花的東西而已。

      我們到目前為止討論的誤解都與模式是什么有關(guān)。現(xiàn)在讓我們來討論一些關(guān)于模式能做什么的誤解。這些誤解有兩類:夸大其詞類和輕描淡寫類。

      這個誤解很容易批駁,因為模式并沒有保證任何東西。它們甚至不能增加從中獲取益處的可能性。模式并不能代替人來完成創(chuàng)造,它們只不過給那些缺乏經(jīng)驗但卻具備才能和創(chuàng)造力的人帶來了希望。

      人們說到好的模式,會有恍然大悟之感。只有當(dāng)模式能夠觸動心弦時,這種情況才會發(fā)生。如果模式無法觸動心弦,那么它就像人跡罕至的森林中的一棵大樹,縱使轟然倒下也沒有人能聽到它的聲音。模式也是如此:即便它編寫得再好,如果不能引起人們的共鳴,那么它好在哪里呢?

      模式只不過是開發(fā)人員軍火庫中的另一件武器。將太多東西都?xì)w功于模式只能適得其反。要防止夸大其詞的宣揚引發(fā)抵觸情緒,最好的方法就是——少說多做。

      這種誤解與上一種誤解很相似,只不過夸張的程度要輕一些。

      在模式的論壇里,定期會有一些關(guān)于模式的產(chǎn)生能力(generativity)的討論。我認(rèn)為,產(chǎn)生能力指的是模式能夠創(chuàng)造新行為(ermergent behavior)的能力。這種表述聽起來很酷,其意思是模式能夠幫助讀者解決模式?jīng)]有明確解決的一些問題。就我所知,還有一些觀點認(rèn)為,真正的產(chǎn)生能力幾乎能夠自動實現(xiàn)這一點。

      對我來說,產(chǎn)生能力的關(guān)鍵在于模式與教學(xué)相關(guān)的部分,例如,對問題的描述和對解決方案的描述,或?qū)πЧ挠懻摗T诙x和提煉架構(gòu)的時候,這些見解尤其有用。但模式本身并不能產(chǎn)生任何東西,能夠產(chǎn)生東西的是人,只有當(dāng)人具備足夠的經(jīng)驗并且他們使用的模式足夠好的時候,他們才能夠這樣做。而且,模式不可能涵蓋架構(gòu)的方方面面。給我看一個稍有規(guī)模的設(shè)計,我一定能發(fā)現(xiàn)既有模式尚未涉及的許多設(shè)計問題。也許這些問題不常見或不經(jīng)常發(fā)生,或者只不過它們尚未被編寫成模式的形式。但無論如何,我們需要運用自己的創(chuàng)造力來填補(bǔ)各種現(xiàn)有模式之間的空白地帶。

      誤解的另一個極端是過分貶低模式的作用,就像現(xiàn)在討論的這一種。竟然有人會相信這種說法,坦白地說,我對此感到很驚訝。然而有許多人曾經(jīng)就這個問題問過我,多到足以讓它能夠在十大誤解中占有一席之地。如果你覺得這種誤解太過幼稚,那么可以直接跳到下一種誤解。

      如果模式不能把專家的經(jīng)驗記錄下來,那么它們就一無是處。究竟記錄哪些經(jīng)驗則由模式的編寫者決定。在面向?qū)ο蟮能浖O(shè)計中,當(dāng)然有值得記錄的經(jīng)驗,但在非面向?qū)ο蟮脑O(shè)計中,同樣有值得記錄的經(jīng)驗。不僅在設(shè)計領(lǐng)域有值得記錄的經(jīng)驗,而且在分析、維護(hù)、測試、文檔、組織結(jié)構(gòu)等領(lǐng)域都有值得記錄的經(jīng)驗。這些不同領(lǐng)域中的模式正在浮現(xiàn)。目前在分析模式領(lǐng)域,已經(jīng)至少出版了兩本書,而且每一屆的PLoP會議都會吸引一些新型的模式。(提交給1996年會議的一個模式特別有意思,它是關(guān)于音樂作曲的模式!)

      與大多數(shù)的誤解一樣,這種誤解也有一定的道理。如果看一看人們使用模式的形式,就會發(fā)現(xiàn)兩種基本的風(fēng)格:一種是《設(shè)計模式》一書所使用的高度結(jié)構(gòu)化的GoF風(fēng)格,另一種是Christopher Alexander的近乎純文學(xué)的風(fēng)格——敘述的文體,采用盡可能少的結(jié)構(gòu)。在我涉足為面向?qū)ο笤O(shè)計以外的領(lǐng)域編寫模式之后,才認(rèn)識到GoF風(fēng)格是多么地偏向面向?qū)ο箢I(lǐng)域。在我嘗試過的其他領(lǐng)域,GoF風(fēng)格根本不適用。對C++慣用法來說,它的結(jié)構(gòu)圖應(yīng)該是什么樣的?對音樂作曲的模式來說,它在實現(xiàn)上的取舍應(yīng)該是什么樣?對于用來撰寫好的說明文的模式來說,它的協(xié)作部分應(yīng)該是什么樣?

      顯然,沒有任何一種模式能夠適用于所有領(lǐng)域。唯一能夠適用于任何領(lǐng)域的是一個通用的概念——無論在什么領(lǐng)域,模式都是一種用來記錄和傳播專家經(jīng)驗的工具。

      這種誤解在過去還能站得住腳,但現(xiàn)在已經(jīng)不是那么回事了。人們正在通過各種渠道報道模式所帶來的好處,這些渠道包括Software—Practice and Experience之類的期刊,以及OOPSLA [HJE95, Schmid95]和ICSE [BCC+]之類的會議。Doug Schmidt也曾經(jīng)表示過,模式對大學(xué)生和研究生的計算機(jī)科學(xué)教學(xué)有諸多好處[PD96]。雖然這些大多是定性的分析,但就我所知,至少有一個團(tuán)體正在進(jìn)行受控的實驗,以獲取量化的結(jié)果。

      隨著時間的推移,我們會更加清楚使用模式所帶來的好處和隱患。即使最初的反饋非常好,我們?nèi)匀恍枰e累更多的經(jīng)驗,這樣才能得到一個更加全面的評估。但是,如果僅僅因為模式所帶來的好處還沒有被完全量化就拒絕馬上開始使用模式,那絕對是很愚蠢的行為。

      關(guān)于模式能夠做什么的謬論就到此為止。下面最后兩種誤解與模式本身無關(guān),而與擁護(hù)模式的社區(qū)有關(guān)。

      模式社區(qū)里常常有著作發(fā)表,但社區(qū)中有學(xué)術(shù)背景的人相對來說卻并不多,對此有人可能會感到不解。事實上,PLoP的大多數(shù)與會者都是軟件行業(yè)的從業(yè)人員,而且似乎一直以來都是這樣。軟件模式的早期擁護(hù)者們(包括Kent Beck、Peter Coad以及Ward Cunningham)沒有一個是來自學(xué)術(shù)界的。GoF中只有一個(Ralph)來自學(xué)術(shù)界,而且他是我所見過的最講究實用性的學(xué)者。模式社區(qū)的草根本質(zhì)顯然與那些所謂的同種論(homogeneity)和精英論是背道而馳的。

      我曾經(jīng)不止一次聽到對模式的責(zé)難,說模式的主要用途是作為那些編著模式方面圖書的人的收入來源。甚至還有一種說法是模式正朝著一個不可告人的方向發(fā)展。

      完全是一派胡言!

      作為GoF中的一員,我可以非常肯定地說,我們4人和其他任何人一樣,對于人們對《設(shè)計模式》的反響感到驚訝。毫無疑問,當(dāng)設(shè)計模式在1994年的OOPSLA會議上初次亮相時,我們4人對它所引起的轟動效應(yīng)完全沒有心理準(zhǔn)備,讀者的大量需求甚至讓出版社都感到措手不及。在寫書的整個過程中,我們最多的考慮就是盡我們所能來創(chuàng)造一本最高質(zhì)量的圖書。為了深入理解模式的內(nèi)容,我們已經(jīng)太忙了,根本無暇考慮銷售問題。

      當(dāng)時的情況就是那樣。現(xiàn)在模式 已經(jīng)成為了一個重要的術(shù)語,因此有些人想利用它來謀取一些私利也在所難免。但是,如果仔細(xì)地閱讀那些模式領(lǐng)軍人物編寫的作品,你就會感受到其***同的宗旨:將來之不易的專家經(jīng)驗、最佳實踐,甚至是競爭優(yōu)勢——多年親身實踐所積累的經(jīng)驗碩果——不僅展露出來而且傳授給所有后來者。

      正是這種要提升所有讀者的軟件設(shè)計能力的熱情,激勵著每一位真誠而富有成效的模式編寫者。缺少任何一項因素,那只能是適得其反,并最終導(dǎo)致對模式的誤解。

      澄清了這些誤解之后,人們對設(shè)計模式的反應(yīng)不外乎有兩種。下面我會通過一個類比來對它們進(jìn)行描述。

      設(shè)想有一個電子愛好者,雖然他沒有經(jīng)過正規(guī)的培訓(xùn),但是卻日積月累地設(shè)計并制造出了許多有用的電子設(shè)備:業(yè)余無線電、蓋革計數(shù)器、報警器等。有一天這個愛好者決定重新回到學(xué)校去攻讀電子學(xué)學(xué)位,來讓自己的才能得到正式的認(rèn)可。隨著課程的展開,這個愛好者突然發(fā)現(xiàn)課程內(nèi)容都似曾相識。似曾相識的不是術(shù)語或表述的方式,而是背后的概念。這個愛好者不斷學(xué)到一些名稱和原理,雖然這些名稱和原理原來他并不知道,但事實上他多年以來一直都在使用。整個過程只不過是一個接一個的頓悟。

      現(xiàn)在讓我們把鏡頭切換到一個大學(xué)新生,這個新生正在同一個班學(xué)習(xí)同樣的課程。他沒有電子學(xué)的背景,有的只是大量的輪滑經(jīng)驗,沒錯,但就是沒有電子學(xué)的背景。對他而言,學(xué)習(xí)新課程極其吃力,這并不是因為他笨,而是因為這些內(nèi)容對他來說完全是新的。這個新生需要花更多的時間來理解和領(lǐng)會所有的內(nèi)容。通過努力學(xué)習(xí)再加上一點毅力,他最終完成了所有的課程。

      如果你覺得自己像一個設(shè)計模式愛好者,那么你會更加有動力。如果你覺得自己更像一個新生,那么請振作起來:你在學(xué)習(xí)好的模式上的付出是不會白費的,只要將它們應(yīng)用到自己的設(shè)計中就會得到回報。我保證。

      但對有些人來說,電子學(xué)這個類比可能不太貼切,因為其中包含了“電子技師”的內(nèi)涵。如果你也這樣認(rèn)為的話,那么不妨考慮一下Alfred North Whitehead在1943年說過的一句話,雖然是在不同的場合下說的,但它也許會更加貼切:

      藝術(shù)就是將一種模式強(qiáng)加于經(jīng)歷,以及識別這種模式時所帶來的審美享受。

      本文節(jié)選自《設(shè)計模式沉思錄》

      內(nèi)容簡介

      本書在GoF的《設(shè)計模式》一書的基礎(chǔ)上進(jìn)行了拓展,運用其中的概念,介紹了一些技巧,幫助讀者決定在不同的情況下應(yīng)該使用哪些模式,以及不應(yīng)該使用哪些模式。本書不僅對已有的一些模式提出新的見解,還讓讀者見證開發(fā)新模式的整個過程。

      本書適合使用設(shè)計模式的軟件開發(fā)人員閱讀。

      本文轉(zhuǎn)載自異步社區(qū)。

      原文鏈接:https://www.epubit.com/articleDetails?id=NC7E3EF91EA600001E0321B801A9039A0

      軟件開發(fā) 軟件開發(fā)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:excel使用圖表分析指數(shù)級變化的方法是什么
      下一篇:三代開源社區(qū)的協(xié)作模式
      相關(guān)文章
      中文字幕亚洲综合久久| 亚洲日韩精品无码专区网址| 国产日韩亚洲大尺度高清| 国产精品亚洲专区一区| 亚洲AV女人18毛片水真多| 亚洲人成网亚洲欧洲无码| 亚洲午夜无码久久久久小说| 亚洲精品午夜国产va久久| 亚洲av无码片在线观看| 亚洲一级片在线观看| 亚洲一区二区三区在线网站| 亚洲制服丝袜在线播放| 亚洲人成电影院在线观看| 亚洲a视频在线观看| 中文文字幕文字幕亚洲色| 亚洲一级毛片免费看| 亚洲AV无码精品蜜桃| 97se亚洲国产综合自在线| 亚洲综合色区中文字幕| 中文字幕无码精品亚洲资源网久久| 亚洲一级毛片在线播放| 亚洲精品一二三区| 亚洲国产精品成人综合色在线| 亚洲精品美女久久久久久久| 亚洲AV成人一区二区三区观看| 朝桐光亚洲专区在线中文字幕| 亚洲AV成人潮喷综合网| 精品国产亚洲一区二区在线观看 | 亚洲国产精品VA在线看黑人| 一本色道久久综合亚洲精品| 国产亚洲精品资源在线26u| 亚洲AV无码一区东京热| 亚洲视频在线观看| 亚洲成人福利在线观看| 中文字幕 亚洲 有码 在线| 久久亚洲AV成人无码国产最大| 亚洲国产av一区二区三区| 中国亚洲女人69内射少妇| 亚洲AV永久无码精品水牛影视| 久久久久亚洲av无码专区| 亚洲欧洲日韩极速播放|