<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Samuel's Weblog

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      7 隨筆 :: 2 文章 :: 9 評論 :: 0 Trackbacks
    最近在審查(review)代碼時,常常發(fā)現(xiàn)一大堆代碼充滿了各種bad smell.即使工作了三五年的同事,也不會例外.溝通時往往發(fā)現(xiàn)他們對OO的理解只是表現(xiàn)出簡單的概念理解.對OO的一些原則不甚了解,或者寫代碼也是跟著感覺走.

    我最初做開發(fā)的時候也是跟著感覺走,初次聽到OCP如天外來物.使用Java或C#不代表你就是在做OO開發(fā),熟練使用OO語言不代表已經(jīng)對OO非常了解.感謝Uncle Bob的經(jīng)典巨著<Agile Software Development>,堅持閱讀的習(xí)慣讓我接觸并努力理解OO原則.一旦對這些原則有了深入的認(rèn)識,寫代碼時就已經(jīng)從更高的角度來分析問題,解決問題,力爭寫出優(yōu)雅的代碼.

    我對OO的了解也不算多深刻,只在這里拋磚引玉.因?yàn)樵瓌t比較多,用一個系列來介紹會讓大家更容易溝通.

    同時,原則是死的,人是活的,不要被這些原則束縛,有一些原則在特定的情況下才會有效.

    Single Choice Principle(SCP)
    所有的判斷只在一處進(jìn)行.違反此原則的典型情況是不同的方法中充斥著相同的if ... else ...或類似的語句.

    Linguistic Modular Units

    Few Interfaces

    Small Interfaces

    Explicit Interfaces

    Behavioral Completeness
    一個完整的類必須包含完整的方法.如果類沒有完成它的職責(zé),或者沒有完成其父類需要完成的工作,那么它就是不完整的類.

    Law Of Demeter
    只與直接協(xié)作的類交互.

    The Principle of Essential Representation(PER)
    類應(yīng)該包含而且只包含其本質(zhì)的定義和表現(xiàn),與SRP比較接近.

    Single Responsibility Principle(SRP)
    一個類只承擔(dān)一項(xiàng)職責(zé),只能有一個發(fā)生變化的理由,那就是它的職責(zé)變化了.

    Open-Colse Principle(OCP)
    類應(yīng)該對擴(kuò)展是開放的,對修改是封閉的.

    Liskov Substitution (LSP)
    子類必須可以替換父類.

    Dependency-Inversion Principles(DIP)
    高層應(yīng)該不依賴于低層,雙方都應(yīng)該依賴于抽象.抽象不依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象.

    Interface Segregation Principles(ISP)
    接口屬于客戶程序.

    ---------------------------------
    Reuse Release Equivalence Principle(REP)
    重用的粒度等于發(fā)布的粒度.

    Common Reuse Principle(CRP)
    包中的類應(yīng)該是共同重用的.

    Common Closure Principle(CCP)
    包中的類對同一類變化共同封閉的,一個類發(fā)生變化,可能所有的類都要發(fā)生變化.

    ---------------------------------
    Acyclic Dependencies Principle(ADP)
    包之間的依賴結(jié)構(gòu)不應(yīng)該存在環(huán)依賴.

    Stable Dependencies Principle (SDP)
    包應(yīng)該依賴于比它更穩(wěn)定的包.

    Stable Abstractions Principle(SAP)
    包的穩(wěn)定程度與抽象程度成正比,越抽象的包越穩(wěn)定.

    ---------------------------------
    開發(fā)時應(yīng)該避免的bad design smell:
    僵化(Rigidity) 一處變化會影響系統(tǒng)中的很多地方.
    脆弱(Fragility) 一處變化會影響系統(tǒng)中不應(yīng)該被影響的地方.
    牢固(Immobility) 很難被重用.

    還有一些原則可能被遺漏掉,如果你發(fā)現(xiàn)了,請及時提醒我.

     更多內(nèi)容在另一博客http://samuelray.javaeye.com.
    posted on 2008-03-14 09:55 SamuelRay 閱讀(1865) 評論(8)  編輯  收藏

    評論

    # re: OO 原則 2008-03-14 11:53 和風(fēng)細(xì)雨
    孫子兵法很多人都讀過,可按教條行事就能成一個合格的將軍了嗎?  回復(fù)  更多評論
      

    # re: OO 原則 2008-03-14 12:42 dennis
    做code review的時候,你會發(fā)現(xiàn)原來這世界上大多數(shù)的“程序員”是在混日子,寫的代碼慘不忍睹。  回復(fù)  更多評論
      

    # re: OO 原則 2008-03-14 14:53 shoru
    讀讀也無妨啊,哪個將軍不讀孫子?  回復(fù)  更多評論
      

    # re: OO 原則 2008-03-16 08:52 卜清楚
    學(xué)孫子兵法不是背孫子兵法
    領(lǐng)悟了孫子兵法精髓的,甚至領(lǐng)悟一半的都是合格的將軍了。  回復(fù)  更多評論
      

    # re: OO 原則[未登錄] 2008-03-16 11:32 paul
    1有些情況下知道這些原則,但是不徹底理解,所以也用不了
    2,有時運(yùn)用這些原則,會多寫很多代碼,在工期緊的情況下,實(shí)現(xiàn)功能第一位
    有時間可以重構(gòu)下  回復(fù)  更多評論
      

    # re: OO 原則 2008-03-17 10:39 hyx
    有時候不用那么教條  回復(fù)  更多評論
      

    # re: OO 原則 2008-03-17 12:16 legendsen
    OO固然好,值得發(fā)揚(yáng)和學(xué)習(xí),不過也不能凡事都OO,否則就是OOOO了,
    不能為了OO而OO。OO也是為了項(xiàng)目服務(wù)的。要想做得徹底,程序非常非
    常規(guī)范,還得要分公司分項(xiàng)目分領(lǐng)導(dǎo)啊...
      回復(fù)  更多評論
      

    # re: OO 原則 2008-03-18 21:27 咖啡屋的鼠標(biāo)
    總感覺這里面有些原則是告訴我們應(yīng)該做什么,而有些只是說了做好了應(yīng)該是什么樣。  回復(fù)  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲视频在线免费| 一区二区免费视频| 国产免费久久精品| 亚洲大成色www永久网址| 午夜不卡久久精品无码免费 | 亚洲午夜日韩高清一区| 在线视频亚洲一区| 日韩高清在线免费看| 亚洲色大成网站www尤物| 国产又黄又爽又猛免费app| 亚洲国产成人久久三区| 成人毛片免费播放| 四虎成人精品永久免费AV| 亚洲AV日韩AV永久无码绿巨人| a级毛片高清免费视频| 国产av天堂亚洲国产av天堂| 免费无码作爱视频| 亚洲男人天堂av| 91人人区免费区人人| 亚洲免费黄色网址| 免费观看的毛片手机视频| www亚洲精品久久久乳| 亚洲国产a级视频| 国产做国产爱免费视频| 久久亚洲AV成人无码软件| aa级一级天堂片免费观看| 亚洲成AV人片高潮喷水| 亚洲第一区在线观看| 两性色午夜免费视频| 亚洲网站在线播放| 大学生高清一级毛片免费| 日本激情猛烈在线看免费观看| 亚洲国产精品成人久久| 国产精品色拉拉免费看| 美女羞羞喷液视频免费| 国产偷国产偷亚洲高清日韩| 亚洲w码欧洲s码免费| 老妇激情毛片免费| 久久久亚洲欧洲日产国码是AV| 狼友av永久网站免费观看| 国产在线国偷精品免费看|