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

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

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

    Samuel's Weblog

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      7 隨筆 :: 2 文章 :: 9 評(píng)論 :: 0 Trackbacks

    置頂隨筆 #

    最近在審查(review)代碼時(shí),常常發(fā)現(xiàn)一大堆代碼充滿了各種bad smell.即使工作了三五年的同事,也不會(huì)例外.溝通時(shí)往往發(fā)現(xiàn)他們對(duì)OO的理解只是表現(xiàn)出簡(jiǎn)單的概念理解.對(duì)OO的一些原則不甚了解,或者寫代碼也是跟著感覺走.

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

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

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

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

    Linguistic Modular Units

    Few Interfaces

    Small Interfaces

    Explicit Interfaces

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

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

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

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

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

    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)
    包中的類對(duì)同一類變化共同封閉的,一個(gè)類發(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ā)時(shí)應(yīng)該避免的bad design smell:
    僵化(Rigidity) 一處變化會(huì)影響系統(tǒng)中的很多地方.
    脆弱(Fragility) 一處變化會(huì)影響系統(tǒng)中不應(yīng)該被影響的地方.
    牢固(Immobility) 很難被重用.

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

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

    僅列出標(biāo)題  
    主站蜘蛛池模板: 亚洲国产激情一区二区三区| 亚欧色视频在线观看免费| 久久精品国产亚洲AV麻豆王友容| 亚洲精品国产日韩无码AV永久免费网 | 亚洲色中文字幕在线播放| 国产精品无码免费播放| 国产免费A∨在线播放| 国产精品亚洲二区在线| 国产免费拔擦拔擦8x| 亚洲国产综合91精品麻豆| 老司机精品视频免费| 午夜国产精品免费观看 | 亚洲精品视频免费看| 亚洲人成免费电影| 无码AV动漫精品一区二区免费| 免费精品国自产拍在线播放| 女人隐私秘视频黄www免费| 久久久久久成人毛片免费看| 国国内清清草原免费视频99| 在线观看免费国产视频| 久久精品国产精品亚洲艾| 亚洲伊人色一综合网| ssswww日本免费网站片| 免费不卡在线观看AV| 男女啪啪永久免费观看网站| www.亚洲精品.com| 午夜亚洲国产理论秋霞| 久久精品国产亚洲av麻豆图片 | 中文字幕无码精品亚洲资源网| 亚洲成色在线影院| 美女视频黄视大全视频免费的| 久久久免费的精品| 亚洲国产人成中文幕一级二级| 久久久久亚洲AV无码网站| 久久精品国产亚洲AV大全| 亚洲国产精品自在线一区二区 | 亚洲最大免费视频网| 青青草国产免费久久久91| 91麻豆国产自产在线观看亚洲| 亚洲国产精品乱码一区二区| 亚洲人成片在线观看|