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

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

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

    潛魚(yú)在淵

    Concentrating on Architectures.

    posts - 77, comments - 309, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    代碼檢查(5)

    Posted on 2008-10-28 00:43 非魚(yú) 閱讀(2597) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 面向?qū)ο笤O(shè)計(jì)Java技術(shù)
    5. Feature Envy

    Feature Envy,按照Martin Fowler的定義是:函數(shù)對(duì)某個(gè)class的興趣高過(guò)對(duì)自己所處之host class的興趣。通常的代碼檢查工具會(huì)根據(jù)一個(gè)類(lèi)中的方法調(diào)用另一個(gè)類(lèi)中方法的次數(shù)來(lái)判斷是否存在Feature Envy。

    遺憾的是這個(gè)定義是含糊的。Feature Envy做為一種代碼現(xiàn)象,如果不能精確的描述和界定其害處,就不能指導(dǎo)我們?nèi)绾握_處理它,因此我們需要定義什么是有害的Feature Envy。

    定義一個(gè)有害的Feature Envy,必須從封裝說(shuō)起。

    封裝是面向?qū)ο笞罡镜脑瓌t,泛泛的定義是“把數(shù)據(jù)和對(duì)數(shù)據(jù)的操作丟到一起就是封裝”。這對(duì)實(shí)踐毫無(wú)益處,每個(gè)人都可以很容易的理解這句話,但仔細(xì)想想,過(guò)往設(shè)計(jì)過(guò)的對(duì)象,有多少是封裝良好的?

    因?yàn)槲覀儾恢婪庋b的根基,這是東方文化中缺乏的東西。大家都知道要封裝,但不知道封裝什么:

    • 封裝權(quán)屬。
    “讓上帝的歸給上帝,凱撒的歸給凱撒。”不要把狗尾巴裝到貓身上。當(dāng)然在實(shí)踐中總是不那么簡(jiǎn)單的。在日常生活中,我們常常不知道誰(shuí)有什么樣的權(quán)利,不知道某個(gè)東西屬于誰(shuí),不知道誰(shuí)是管事的等等。長(zhǎng)期處于這樣的環(huán)境中,使人習(xí)慣于一種莫愣兩可的態(tài)度。人都這樣了還怎么分的清楚權(quán)屬呢。但在設(shè)計(jì)之初記住這個(gè)還是有益的。
    • 封裝職責(zé)。
    這是上一個(gè)原則的推論。西方人常說(shuō)的兩句話是:It's you business, not mine. None of your business. 西方人認(rèn)為你的是你的,我的是我的;中國(guó)人認(rèn)為你的是我的,我的還是我的。在我們?cè)O(shè)計(jì)的類(lèi)中,常常可見(jiàn)就現(xiàn)象就是大雜燴,什么方法都丟到一個(gè)類(lèi)里面處理了。
    • 封裝變化。
    這也是把不變的東西抽象出來(lái)的過(guò)程。變化無(wú)處不在以具有相對(duì)性,把相對(duì)不變和相對(duì)易變的東西分離開(kāi),這個(gè)過(guò)程是一個(gè)抽象的過(guò)程,也是對(duì)已封裝對(duì)象的解包和再封裝。顯然封裝變化是從時(shí)間的角度來(lái)考察對(duì)象,結(jié)合“軟件”的可變特性而來(lái)的。如果說(shuō)封裝權(quán)屬和封裝職責(zé)在于尊重現(xiàn)實(shí),那么封裝變化就是設(shè)計(jì)過(guò)程中真正體現(xiàn)價(jià)值的東西。前者意味著照貓畫(huà)虎,后者才見(jiàn)設(shè)計(jì)者的功力。

    而所謂“代理”,基本上就是封裝職責(zé)(甚至封裝權(quán)屬,比較少見(jiàn))和封裝變化的結(jié)合。

    現(xiàn)在我們可以定義一個(gè)有害的Feature Envy了:在非代理情況下,對(duì)象權(quán)屬的屬性或數(shù)據(jù)、職責(zé)在另外一個(gè)對(duì)象中,并且被這個(gè)對(duì)象頻繁調(diào)用,從而破壞了封裝的情形。

    借助于代碼檢查工具,我們可以輕易的找出類(lèi)之間頻繁調(diào)用的方法;考慮上述定義,我們可以在恰當(dāng)?shù)臅r(shí)機(jī)進(jìn)行重構(gòu),消除有害的Feature Envy。


    , , ,


    評(píng)論

    # re: 編碼問(wèn)題(5)  回復(fù)  更多評(píng)論   

    2008-10-28 18:46 by 123
    不錯(cuò)不錯(cuò)。。。。
    主站蜘蛛池模板: 国产成人免费高清激情明星| www.亚洲一区| 日韩在线免费看网站| 日本亚洲成高清一区二区三区| 亚洲一区二区三区写真| 免费毛片a线观看| 亚洲综合色成在线播放| 亚洲精品国产suv一区88| av无码免费一区二区三区| 亚洲丁香色婷婷综合欲色啪| 9久久免费国产精品特黄| 亚洲?V无码成人精品区日韩| 国产精成人品日日拍夜夜免费| 亚洲欧洲成人精品香蕉网| 一个人看的www免费高清| 免费在线黄色网址| 久久久久亚洲国产AV麻豆| 在线免费视频一区二区| 亚洲AV无码无限在线观看不卡| 亚洲三级高清免费| 亚洲高清视频在线| 亚洲精品国产精品乱码视色| 免费黄网站在线看| 男男gay做爽爽的视频免费| 免费真实播放国产乱子伦| caoporm碰最新免费公开视频| 国产亚洲美女精品久久久2020| aa级毛片毛片免费观看久| 亚洲色大成网站www永久男同 | AV在线播放日韩亚洲欧| 99视频在线精品免费观看6| 亚洲综合av一区二区三区不卡| 亚洲va无码手机在线电影| 最近中文字幕免费2019| 亚洲黄色片在线观看| 国产精品1024永久免费视频| 成人一区二区免费视频| 99久久亚洲综合精品成人网| 日韩国产免费一区二区三区| 久久青草免费91线频观看不卡| h片在线播放免费高清 |