LetsCoding.cn

          天地之間有桿秤,拿秤砣砸老百姓。

          模式影響之20年

          本文首次發(fā)布在IEEE軟件雜志,由InfoQ和IEEE計(jì)算機(jī)社會(huì)為您呈現(xiàn)。

          在軟件開(kāi)發(fā)中,好的建議是可遇不可求的。通用設(shè)計(jì)原則可以指導(dǎo)我們,但現(xiàn)實(shí)總是逼著我們,在看起來(lái)相互沖突的目標(biāo)之間妥協(xié),比如,可擴(kuò)展性和可維護(hù)性與規(guī)模和復(fù)雜性。同樣的,現(xiàn)有代碼庫(kù)可以在很大程度上讓我們避免重復(fù)造輪子,但想要初級(jí)開(kāi)發(fā)者輕松組合那些現(xiàn)有組件來(lái)做項(xiàng)目,依然不現(xiàn)實(shí)。

          設(shè)計(jì)模式幫助我們縮小了這種差距:對(duì)特定情形下重復(fù)出現(xiàn)的問(wèn)題,它記錄了不錯(cuò)的解決方案。設(shè)計(jì)模式討論影響方案設(shè)計(jì)的主要因素,而不提供現(xiàn)成復(fù)制粘貼的代碼片段。Web應(yīng)用的性能和安全就是這樣的例子:加解密算法增強(qiáng)了安全性,但引入了處理開(kāi)銷(xiāo)。就如你兄長(zhǎng)教你如何做正確的事情一般,Ward Cunningham曾經(jīng)描述了最佳的設(shè)計(jì)模式。1

          盡管模式很流行,但作為設(shè)計(jì)手法的影響,比作為特殊的軟件產(chǎn)品的影響更加難以定量描述。本文主要闡述了模式匯編會(huì)議20年后,可用模式的廣泛性和部分模式對(duì)開(kāi)源軟件的影響深度。

          模式起源

          受建筑師和哲學(xué)家Christopher Alexander啟發(fā), 在1987年,Kent Beck和Ward Cunningham共同編寫(xiě)了設(shè)計(jì)Smalltak窗口程序的小模式語(yǔ)言。1993年,Beck和Grady Booch發(fā)起的一次科羅拉多山區(qū)度假,發(fā)展成了非盈利性Hillside組織。而該組織通過(guò)一系列的PLoP(編程模式語(yǔ)言大會(huì)),推動(dòng)了模式匯編工作。PLoP已成功舉辦了20年,在這個(gè)過(guò)程中,誕生了很多成功的模式論文和書(shū)籍。

          1994年,Erich Gamma和他的同事合著的《設(shè)計(jì)模式》一書(shū),把模式的概念宣傳給更廣泛的人群;到目前為止,該書(shū)已經(jīng)以13種語(yǔ)言,賣(mài)出了50萬(wàn)本。2兩年以后,F(xiàn)rank Buschmann和他的同事合著了《面向模式的軟件架構(gòu)》系列3第一卷;緊接著,Martin Fowler出版了他的《分析模式》。4(深入閱讀的資料可在別處獲取。5-9)“模式形式”的成功,甚至令一些作者和出版商無(wú)故給書(shū)的標(biāo)題上加上“模式”二字,我們覺(jué)得這是成功的代價(jià)。2013年的亞馬遜網(wǎng)站上,在計(jì)算機(jī)和技術(shù)類(lèi)圖書(shū)中,搜索關(guān)鍵詞“模式”,結(jié)果產(chǎn)生了超過(guò)5500個(gè)不同的條目(包括少數(shù)不相關(guān)的視覺(jué)模式檢測(cè)條目)。

          圍繞模式的早期炒作已經(jīng)塵埃落定,人們意識(shí)到,模式既不能代替設(shè)計(jì)技巧,也不能解決所有問(wèn)題。盡管如此,根據(jù)實(shí)際經(jīng)驗(yàn)精心提煉的模式,能提供很有價(jià)值的相關(guān)建議。因?yàn)楝F(xiàn)做現(xiàn)學(xué),往往不是現(xiàn)實(shí)項(xiàng)目的可選項(xiàng),而模式提供了學(xué)習(xí)別人經(jīng)驗(yàn)的一種方式。

          沒(méi)有模式疲勞的跡象

          模式領(lǐng)域的普遍多樣性,使得有記載的模式的數(shù)目很難確定。Linda Rising的《模式年鑒2000》列出了超過(guò)1000種模式。10由Hillside組織贊助的PLoP大會(huì)已經(jīng)接受了超過(guò)1500篇模式論文。大會(huì)論文的提交率一直穩(wěn)定在每年100份左右。保守估計(jì)每篇論文4種模式,再加上所有的書(shū)籍和封面設(shè)計(jì),移動(dòng)應(yīng)用開(kāi)發(fā),自適應(yīng)系統(tǒng),可持續(xù)架構(gòu),領(lǐng)域特定模式,元架構(gòu),工作流,容錯(cuò)系統(tǒng)和安全。

          大多數(shù)人認(rèn)可的模式定義為:特定上下文中,某問(wèn)題的成熟解決方案。在《建筑的永恒之道》中,Christopher Alexander闡明道:“簡(jiǎn)而言之,模式是,在同一時(shí)間,世界上發(fā)生的事物,創(chuàng)建這個(gè)事物的規(guī)則以及必須創(chuàng)建該事物的時(shí)刻。”11模式給出了可復(fù)用的解決方案,也提供了方案的好處和它的權(quán)衡,并封裝了成熟的最佳實(shí)踐的知識(shí)。

          例如,很多集成體系架構(gòu)都使用Broker模式,它扮演客戶(hù)端和服務(wù)端中間人的角色,負(fù)責(zé)處理消息路由,包括序列化和反序列化消息內(nèi)容。2Web的通訊基礎(chǔ)架構(gòu)就實(shí)現(xiàn)了這種模式;類(lèi)似YAWL的工作流引擎也包含了豐富的實(shí)現(xiàn)。12

          很多模式只是模式庫(kù)的一部分,例如雅虎的UI庫(kù)安全模式網(wǎng)站。很多公司,包括亞馬遜,谷歌,IBM,Lucent,微軟,甲骨文和西門(mén)子,都寫(xiě)有相似的模式集合,它們中的部分可從書(shū)籍或網(wǎng)站獲取。IBM的電子商務(wù)分類(lèi)編目模式就是模式集合的一個(gè)例子,除許多其他重復(fù)設(shè)計(jì)外,WebSphere產(chǎn)品系中的ESB(企業(yè)服務(wù)總線(xiàn))實(shí)現(xiàn)還以它為特色。13基于彼此構(gòu)建的、相互關(guān)聯(lián)的模式的集合可形成模式語(yǔ)言,它能支撐具有生產(chǎn)力的,領(lǐng)域特定的開(kāi)發(fā)過(guò)程。14甚至還有一個(gè)編寫(xiě)模式的模式語(yǔ)言。15

          企業(yè)集成模式

          模式在軟件架構(gòu)和設(shè)計(jì)上的成功,激勵(lì)了人們嘗試把它們更緊密的集成到編程工具中以提高生產(chǎn)力,更緊密的整合進(jìn)設(shè)計(jì)和實(shí)現(xiàn)的思維方式中。不幸的是,大部分嘗試都失敗了,因?yàn)槟J皆局皇侨祟?lèi)之間記錄和傳遞知識(shí)的媒介,不是一個(gè)編程結(jié)構(gòu)。盡管如此,有些模式語(yǔ)言確實(shí)直接影響了軟件方案的建立過(guò)程。

          大約在2003年,ESB這個(gè)術(shù)語(yǔ),由于描述SOA(面向服務(wù)的體系結(jié)構(gòu))集成平臺(tái)獲得了人們的關(guān)注。ESB產(chǎn)品在不同服務(wù)之間路由、過(guò)濾和轉(zhuǎn)換XML消息;它們代表的是實(shí)現(xiàn)Broker模式的傳統(tǒng)企業(yè)應(yīng)用集成產(chǎn)品的演變。諷刺的是,盡管ESB產(chǎn)品的目標(biāo)是整合不同的企業(yè)應(yīng)用,但是缺乏描述這種方案設(shè)計(jì)的共同詞匯。

          null
          圖1 Apache Camel核心代碼隨時(shí)間增長(zhǎng)情況。Java代碼庫(kù)的線(xiàn)性增長(zhǎng)意味著穩(wěn)定的提交者社區(qū)和可持續(xù)的發(fā)展。JavaScript的代碼量在2009年跳躍式增長(zhǎng)之后,開(kāi)始放緩;同樣的情況也發(fā)生在JavaScript類(lèi)庫(kù)和框架的可用性上。

          開(kāi)源ESB實(shí)現(xiàn)的開(kāi)發(fā)者們想要填補(bǔ)這種空缺,但很快就發(fā)現(xiàn),EIP(企業(yè)集成模式)提供了從集成風(fēng)格到消息路由和轉(zhuǎn)換的、條理清楚的65個(gè)模式詞匯7。而這些詞匯能夠描述大部分有意義的ESB解決方案。因此,在缺乏ESB工業(yè)標(biāo)準(zhǔn)的情形下,開(kāi)源項(xiàng)目把EIP詞匯作為了事實(shí)上的標(biāo)準(zhǔn)。

          開(kāi)源ESB產(chǎn)品

          在2005年,隨著開(kāi)源ESB產(chǎn)品的出現(xiàn),幾乎有一打的開(kāi)源ESB產(chǎn)品,已經(jīng)在它們的產(chǎn)品級(jí)領(lǐng)域特定語(yǔ)言或編程模型中,嵌入了EIP語(yǔ)言。最廣泛使用的例子有Mule,Apache CamelWSO2 ESB,Spring IntegrationOpenESB

          開(kāi)源項(xiàng)目的性質(zhì)使得跟蹤它的代碼量相對(duì)容易很多。但是,跟蹤市場(chǎng)占有率卻相對(duì)比較困難,因?yàn)殇N(xiāo)售數(shù)據(jù)并不存在,下載次數(shù)也被鏡像站點(diǎn)、緩存或者自動(dòng)下載所扭曲。13Apache Camel包含大約89萬(wàn)行代碼,由62個(gè)提交者,6年時(shí)間,18000次個(gè)人提交所創(chuàng)建。Java代碼庫(kù)一直呈現(xiàn)驚人的線(xiàn)性增長(zhǎng)(圖1),這意味著穩(wěn)定的提交者群體始終如一的參與。在開(kāi)源核心部分的商業(yè)版本(如Red Hat版,Talend版)中,添加的設(shè)計(jì)或運(yùn)行時(shí)管理工具也顯著的擴(kuò)大了代碼庫(kù)。

          Apache Camel由Maven Central提供的下載量平均每月大概25000次,2013年7月達(dá)到峰值,超過(guò)30000次。這個(gè)數(shù)字高于YAWL,它的下載量在2010年大約每月1000次。13Mule報(bào)告說(shuō),在它的官方站點(diǎn)有360萬(wàn)次下載,但并不能說(shuō)明這都是由個(gè)人用戶(hù)發(fā)起的下載。

          社區(qū)參與給開(kāi)源的成功提供了另外一個(gè)深刻的度量。Apache Camel在2007年首次發(fā)布后,它的社區(qū)發(fā)帖量呈直線(xiàn)上升,穩(wěn)定在每月大概2500貼。這表明它是一個(gè)協(xié)作解決問(wèn)題和促進(jìn)產(chǎn)品演變的健康社區(qū)。與此相比,Mule社區(qū)首頁(yè)顯示,它擁有15萬(wàn)成員,但論壇發(fā)帖總量卻只有26600。

          作為設(shè)計(jì)工具的模式

          融入產(chǎn)品的EIP詞匯流行開(kāi)來(lái)之后,有些ESB項(xiàng)目更進(jìn)一步,在他們的設(shè)計(jì)工具中,采用EIP模式骨架作為其中的可視語(yǔ)言。例如,在Redhat Fuse集成開(kāi)發(fā)環(huán)境或Mule Studio中,開(kāi)發(fā)者可以使用EIP圖標(biāo)語(yǔ)言。跟以前不同,對(duì)異步消息解決方案的簡(jiǎn)單管道過(guò)濾器架構(gòu)風(fēng)格,努力“可視化編程”的嘗試,使這種可視化模式組合顯得很自然。圖2顯示了可視化的Camel路由:它通過(guò)消息路由器,把傳入的消息轉(zhuǎn)發(fā)給兩個(gè)可能的消息端點(diǎn)之一?,F(xiàn)在,ESB開(kāi)發(fā)者可以使用EIP詞匯來(lái)思考、設(shè)計(jì)、交流和實(shí)現(xiàn)他們的解決方案。


          圖2 在Redhat Fuse集成開(kāi)發(fā)環(huán)境中,使用EIP7中可視化模式語(yǔ)言創(chuàng)建消息解決方案。消息從基于文件的消息端點(diǎn)發(fā)出;在基于內(nèi)容的路由器中,根據(jù)消息內(nèi)容所指明的城市,轉(zhuǎn)發(fā)給兩個(gè)消息端點(diǎn)之一?;趦?nèi)容的路由器模式,描述了一種可復(fù)用設(shè)計(jì):根據(jù)消息內(nèi)容,把消息路由給正確的接受者。


          圖3 玩印有EIP的撲克??梢暬J秸Z(yǔ)言允許交互式的、近乎好玩的模式用法。每張牌上都印有模式圖標(biāo)、名稱(chēng)和解決方案。

          在首屆CamelOne大會(huì)上贈(zèng)送的EIP撲克牌(圖3),可能是迄今為止最有創(chuàng)意的模式改編了。每張牌上都印有模式語(yǔ)言中的一個(gè)模式和方案陳述。很高興能看到,為增進(jìn)人們交流和合作而創(chuàng)建的設(shè)計(jì)模式,能以這種平易近人的、有用方式來(lái)到架構(gòu)師和工程師的手中。

          我們以上介紹的統(tǒng)計(jì)數(shù)據(jù)表明,在過(guò)去的20年里,模式語(yǔ)言對(duì)軟件設(shè)計(jì)社區(qū)有著廣泛的影響。然而,很多模式研究的問(wèn)題都還沒(méi)有答案。例如,好的模式并不總是那么容易找到,它需要做更多的工作,去組織和分類(lèi)大量現(xiàn)有模式。我們還設(shè)想,也許使用語(yǔ)義維基技術(shù),模式語(yǔ)言能夠制作工具。最終,以模式為中心的設(shè)計(jì)工具,能保證比單純的組件和連接器的畫(huà)圖工具,對(duì)軟件工程師更有吸引力。

          模式社區(qū)會(huì)失去動(dòng)力嗎?我們不這樣認(rèn)為:現(xiàn)存的模式語(yǔ)言,就像EIP一樣,將會(huì)繼續(xù)被實(shí)現(xiàn)為領(lǐng)域特定語(yǔ)言。而沒(méi)有發(fā)現(xiàn)模式的領(lǐng)域還依然存在。例如,應(yīng)用之間(通過(guò)技術(shù)協(xié)議)和人類(lèi)之間(如通過(guò)社交網(wǎng)絡(luò))的典型會(huì)話(huà),都應(yīng)能以模式的形式予以保存。模式的未來(lái)是光明的,我們誠(chéng)邀您來(lái)塑造它,不管是通過(guò)促進(jìn)模式工具的開(kāi)發(fā),還是以模式的形式,書(shū)寫(xiě)和分享您的設(shè)計(jì)智慧。

          參考

          1. W. Cunningham, “Tips for Editing Patterns,” Dec. 2002.
          2. E. Gamma et al., Design Patterns, AddisonWesley Professional, 1994.
          3. F. Buschmann et al., PatternOriented Software Architecture, Volume 1: A System of Patterns, John Wiley & Sons, 1996.
          4. M. Fowler, Analysis Patterns: Reusable Object Models, AddisonWesley Professional, 1996.
          5. J. Kerievsky, Refactoring to Patterns, AddisonWesley Professional, 2004.
          6. M. Fowler, Patterns of Enterprise Application Architecture, AddisonWesley Professional, 2002.
          7. G. Hohpe and B. Woolf, Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions, AddisonWesley Professional, 2004.
          8. E. Evans, Domain Driven Design: Tackling Complexity in the Heart of Software, AddisonWesley Professional, 2003.
          9. V. Vernon, Implementing DomainDriven Design, AddisonWesley Professional, 2013.
          10. L. Rising, The Pattern Almanac 2000, AddisonWesley, 2000.
          11. C. Alexander, The Timeless Way of Building, Oxford Univ. Press, 1979.
          12. M. Adams, A.H.M. ter Hofstede, and M. La Rosa, “Open Source Software for Workflow Management: The Case of YAWL,” IEEE Software, vol. 28, no. 3, 2011, pp. 16–19.
          13. M. Keen et al, Patterns: Implementing an SOA Using an Enterprise Service Bus, IBM, 2004.
          14. F. Buschmann, K. Henney, and D. Schmidt, “Past, Present, and Future Trends in Software Patterns,” IEEE Software, vol. 24, no. 4, 2007, pp. 31–37.
          15. G. Meszaros and J. Doble, A Pattern Language for Pattern Writing, Hillside Group.

          關(guān)于作者

          Gregor Hohpe是Allianz SE的首席企業(yè)家構(gòu)師和Hillside組織的成員。郵箱:info@enterpriseintegrationpatterns.com。
          Rebecca WirfsBrock是WirfsBrock Associates的主席和Hillside組織的財(cái)務(wù)主管。郵箱:rebecca@wirfsbrock.com。
          Joseph W. Yoder是The Refactory公司和Hillside組織主席。郵箱:joe@refactory.com。
          Olaf Zimmermann教授是位于Rapperswil的Eastern Switzerland大學(xué)應(yīng)用科學(xué)系Institute forSoftware機(jī)構(gòu)的研究合作伙伴。郵箱:ozimmerm@hsr.ch。

          本文首次發(fā)布在IEEE軟件雜志。IEEE軟件的任務(wù)是創(chuàng)建領(lǐng)先和未來(lái)的軟件從業(yè)人員社區(qū)。該雜志提供準(zhǔn)確、實(shí)用、前沿的軟件開(kāi)發(fā)信息,以確保工程師和管理人員掌握快速變化的技術(shù)。

          原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明: 轉(zhuǎn)載自Let'sCoding.cn
          本文鏈接地址: 模式影響之20年

          posted on 2014-05-03 04:28 Rolandz 閱讀(1177) 評(píng)論(3)  編輯  收藏

          評(píng)論

          # 食品110網(wǎng) 2014-05-03 20:37 食品110網(wǎng) 食品安全

          常見(jiàn)有害食品大全,轉(zhuǎn)基因食品名單大全,如何鑒別食品安全?盡在食品110網(wǎng),一個(gè)專(zhuān)注食品安全的公益性網(wǎng)站,值得搜藏。  回復(fù)  更多評(píng)論   

          # re: 模式影響之20年 2014-05-04 15:52 無(wú)添加

          很有創(chuàng)意的撲克牌。  回復(fù)  更多評(píng)論   

          # re: 模式影響之20年 2014-05-04 16:33 Rolandz

          可惜買(mǎi)不到。。。  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          留言簿(1)

          隨筆分類(lèi)(12)

          隨筆檔案(19)

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 五河县| 盐边县| 吉林市| 合肥市| 广西| 常德市| 苏尼特左旗| 渝中区| 桓台县| 临邑县| 天水市| 阿克| 沙雅县| 彭山县| 大邑县| 射阳县| 宜兰市| 陇西县| 云和县| 班玛县| 清丰县| 岳阳市| 渝北区| 连山| 通城县| 齐齐哈尔市| 马尔康县| 象山县| 巩义市| 定日县| 漳平市| 丰宁| 吕梁市| 望江县| 大冶市| 监利县| 万年县| 宁国市| 穆棱市| 金平| 清镇市|