John Jiang

          a cup of Java, cheers!
          https://github.com/johnshajiang/blog

             :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理 ::
            131 隨筆 :: 1 文章 :: 530 評論 :: 0 Trackbacks
          Design Patterns are Code Smells
          上個(gè)月就在TheSeverSide中看到關(guān)于這篇文章(實(shí)際是一篇簡短的Blog)的消息,當(dāng)時(shí)就覺得很有趣,因?yàn)樽约赫趯W(xué)習(xí)設(shè)計(jì)模式,故將這篇短文保存了下來。昨天在自己電腦中又看到了此文,順手就把它翻譯了出來。
          這篇Blog的作者認(rèn)為大部分設(shè)計(jì)模式在代碼層都是code smell,在文末評論中有Google Guice項(xiàng)目的leader -- Bob Lee的評語。Bob對作者的觀點(diǎn)表示了贊同,但也指出框架可以減輕對模式的需要。(2007.06.04最后更新)

          在原始的Gof的書中,作者清楚地指出當(dāng)你在使用設(shè)計(jì)模式時(shí),
              程序設(shè)計(jì)語言的選擇是重要的,因?yàn)樗鼤绊懩橙说挠^點(diǎn)。我們的模式假設(shè)是使用Smalltalk/C++語言級特性,這種選擇決定了什么容易/不容易實(shí)現(xiàn)(Design Patterns, p.4)。
          不幸的是,這條信息基本上被丟棄了,程序員們時(shí)常將模式當(dāng)作處方。Martin Fowler解釋了區(qū)別:
              處方趨于更加特別,經(jīng)常關(guān)聯(lián)于一個(gè)特別的語言和平臺。甚至當(dāng)一些模式需要依賴一個(gè)特定的平臺時(shí),他們?nèi)栽噲D于用這些模式去解釋更加一般的概念。
          如果你已經(jīng)遇到一個(gè)Java或C#應(yīng)用程序看起來像C++的處理方式,你就會知道這兩個(gè)概念的混合將造成損害。
          不管你如何從處方中區(qū)分出模式,你所思考的程序設(shè)計(jì)語言就是你要為之所設(shè)計(jì)的程序語言。這也就是為什么Prags鼓勵(lì)每個(gè)人每年學(xué)習(xí)一種新的語言。你將仍會為你所知道的這組語言進(jìn)行設(shè)計(jì),但至少你將不會沒有希望。
          程序語言提前使模式不能成為藥方?;氐?998年,Petter Norvig爭論道,大部分的原始Gof模式在Dylan或Lisp中都是無形或簡單的。之后,Greg Sullivan對Scheme持同樣的觀點(diǎn)。Jan Hannemann也使用Java+AspectJ證明了相同的觀點(diǎn)。設(shè)計(jì)模式不能如處方那樣發(fā)揮良好。它們最多是周期性的。
          在代碼級別,大部分的設(shè)計(jì)模式都是代碼異味(code smells)。當(dāng)程序員在代碼檢查中看到了設(shè)計(jì)模式,他們就會滑入到催眠般的熟悉場景中。醒醒!那是一個(gè)設(shè)計(jì)模式,或者說是一個(gè)來自腐臭程序語言的失效藥方?


          posted on 2007-06-04 09:00 John Jiang 閱讀(560) 評論(2)  編輯  收藏 所屬分類: Others 、翻譯Methodology

          評論

          # re: Design Patterns are Code Smells(譯)[未登錄] 2007-06-29 16:10 sitinspring
          Very funny!  回復(fù)  更多評論
            

          # re: Design Patterns are Code Smells(譯) 2007-07-02 08:24 Sha Jiang
          I have the same view :-)  回復(fù)  更多評論
            

          主站蜘蛛池模板: 菏泽市| 东海县| 新疆| 渝中区| 平安县| 靖边县| 襄汾县| 澄江县| 高雄县| 洪泽县| 内乡县| 页游| 河曲县| 镇江市| 启东市| 普兰店市| 安国市| 长海县| 清水河县| 静乐县| 嘉峪关市| 伽师县| 金阳县| 高密市| 龙门县| 衡水市| 盈江县| 栖霞市| 镇原县| 淄博市| 高台县| 常宁市| 固原市| 闽侯县| 林芝县| 岫岩| 龙海市| 松滋市| 沙坪坝区| 高雄县| 北川|