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

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

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

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

    模塊的設(shè)計(jì)(書摘)

    Posted on 2008-04-06 13:00 dennis 閱讀(1574) 評(píng)論(0)  編輯  收藏 所屬分類: 模式與架構(gòu)
        模塊化的價(jià)值毋庸置疑。
        模塊化代碼的首要特質(zhì)就是封裝。封裝良好的模塊不會(huì)過(guò)多向外部披露自身的細(xì)節(jié),不會(huì)直接調(diào)用其它模塊的實(shí)現(xiàn)碼,也不會(huì)胡亂共享全局?jǐn)?shù)據(jù)。模塊之間通過(guò)應(yīng)用程序編程接口(API)——一組嚴(yán)密、定義良好的程序調(diào)用和數(shù)據(jù)結(jié)構(gòu)來(lái)通信。這就是模塊化原則的內(nèi)容。API在模塊間扮演雙重角色。在實(shí)現(xiàn)層面,作為模塊之間的滯塞點(diǎn)(choke point),阻止各自的內(nèi)部細(xì)節(jié)被相鄰模塊知曉;在設(shè)計(jì)層面,正是API(而不是模塊間的實(shí)現(xiàn)代碼)真正定義了整個(gè)體系。
        模塊的最佳模塊大小,邏輯行在200到400之間,物理行在400到800之間為最佳。模塊太小,幾乎所有的復(fù)雜度都集中在接口,同樣不利于理解,也就是透明性的欠缺。
       緊湊性就是一個(gè)特性能否裝進(jìn)人腦中的特性。理解緊湊性可以從它的“反面”來(lái)理解,緊湊性不等于“薄弱”,如果一個(gè)設(shè)計(jì)構(gòu)建在易于理解且利于組合的抽象概念上,則這個(gè)系統(tǒng)能在具有非常強(qiáng)大、靈活的功能的同時(shí)保持緊湊。緊湊也不等同于“容易學(xué)習(xí)”:對(duì)于某些緊湊 設(shè)計(jì)而言,在掌握其精妙的內(nèi)在基礎(chǔ)概念模型之前,要理解這個(gè)設(shè)計(jì)相當(dāng)困難;但一旦理解了這個(gè)概念模型,整個(gè)視角就會(huì)改變,緊湊的奧妙也就十分簡(jiǎn)單了。緊湊也不意味著“小巧”。即使一個(gè)設(shè)計(jì)良好的系統(tǒng),對(duì)有經(jīng)驗(yàn)的用戶來(lái)說(shuō)沒什么特異之處、“一眼”就能看懂,但仍然可能包含很多部分。
        評(píng)測(cè)一個(gè)API緊湊性的經(jīng)驗(yàn)法則是:API的入口點(diǎn)通常在7個(gè)左右,或者按《代碼大全2》的說(shuō)法,7+2和7-2的范圍內(nèi)。
        如果兩個(gè)或更多事物中的一個(gè)發(fā)生變化,不會(huì)影響其他事物,這些事物就是正交的。每一個(gè)動(dòng)作只改變一件事,不會(huì)影響其他(沒有其他副作用)。舉個(gè)例子,比如讀取配置文件,獲得系統(tǒng)設(shè)置信息這個(gè)方法:
    module Config
       
    def self.load_config
             config_str
    =File.open("r","config.xml").read
             
    #解析配置文件,可能轉(zhuǎn)化成XML Dom處理等
             
       end
    end
    這個(gè)方法想當(dāng)然地認(rèn)為配置文件存儲(chǔ)于磁盤文件中,然而配置文件完全是有可能通過(guò)網(wǎng)絡(luò)獲取的,也就是說(shuō)文件句柄未必來(lái)源于磁盤文件,這個(gè)方法承擔(dān)了兩個(gè)職責(zé):獲取配置數(shù)據(jù)和解析配置數(shù)據(jù)。重構(gòu)一下,以提高正交性:
    module Config
       
    def self.load_config(io)
             config_str
    =io.read
             parse_config(config_str)         
       end
       private
       
    def self.parse_config(config_str)
        
    #解析
       end 
    end
        重構(gòu)技術(shù)中的很多壞味道,特別是重復(fù)代碼,是違反正交性的明顯例子,“重構(gòu)的原則性目標(biāo)就是提高正交性”。
        DRY(Don't Repeat Yourself)原則,意思是說(shuō):任何一個(gè)知識(shí)點(diǎn)在系統(tǒng)內(nèi)都應(yīng)當(dāng)有一個(gè)唯一、明確、權(quán)威的表述。這個(gè)原則的另一種表述就是所謂SPOT原則(Single Point Of Truth)——真理的單點(diǎn)性。
        提高設(shè)計(jì)的緊湊性,有一個(gè)精妙但強(qiáng)大的方法,就是圍繞“解決一個(gè)定義明確的問題”的強(qiáng)核心算法組織設(shè)計(jì),避免臆斷和捏造。

    主站蜘蛛池模板: 中文字幕在线免费观看视频| 亚洲av无码专区国产不乱码| 色播在线永久免费视频网站| 免费人成在线观看网站视频| 老牛精品亚洲成av人片| 免费观看的a级毛片的网站| 亚洲日本一线产区和二线| 成人免费777777| 亚洲爆乳AAA无码专区| 国产美女精品视频免费观看| 精品国产亚洲AV麻豆| 亚洲国产精品碰碰| 久久国产精品免费一区二区三区| 久久久久亚洲av毛片大| 免费久久人人爽人人爽av| 亚洲av永久无码制服河南实里| 久久九九AV免费精品| 亚洲性猛交xx乱| 免费精品国产自产拍观看| 一区二区三区在线免费观看视频| 亚洲精品无码久久久影院相关影片 | 免费在线黄色网址| 国产精品午夜免费观看网站| 亚洲AV中文无码字幕色三| 免费在线观看h片| 亚洲av无码一区二区三区人妖| 亚洲国产成人久久综合碰| 曰批全过程免费视频在线观看无码 | 亚洲日本一线产区和二线| 四虎亚洲国产成人久久精品| 两个人看的www免费视频| 亚洲日本香蕉视频观看视频| 爽爽日本在线视频免费| 精品久久久久久国产免费了 | 国产成人无码免费视频97| 在线观看免费无码视频| 亚洲日本在线免费观看| 好爽好紧好大的免费视频国产| 中文字幕av免费专区| 亚洲国产成人99精品激情在线| 亚洲成A∨人片天堂网无码|