ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          作法(Mechanics)
            • 檢查source class定義之source method所使用的一切特性(features),考慮它們是否也該被搬移。
                • ==》如果某個(gè)特性只被你打算搬移的那個(gè)函數(shù)用到,你應(yīng)該將它一并搬移。如果另有其他函數(shù)使用了這個(gè)特性,你可以考慮將使用該特性的所有函數(shù)全部一并搬移。有時(shí)侯搬移一組函數(shù)比逐一搬移簡單些。
            • 檢查source class的subclass和superclass,看看是否有該函數(shù)的其他聲明。
                • ==》如果出現(xiàn)其他聲明,你或許無法進(jìn)行搬移,除非target class也同樣表現(xiàn)出多態(tài)性(polymorphism)。
            • 在target class中聲明這個(gè)函數(shù)。
                • ==》你可以為此函數(shù)選擇一個(gè)新名稱 -- 對(duì)target class更有意義的名稱。
            • 將source method的代碼拷貝到target method中。調(diào)整后者,使其能在新家中正常運(yùn)行。
                • ==》如果target method使用了source特性,你得決定如何從target method引用source object。如果target class中沒有相應(yīng)的引用機(jī)制,就把source object reference當(dāng)作參數(shù),轉(zhuǎn)給新建立的target method。
                • ==》如果source method包含異常處理式(exception handler),你得判斷邏輯上應(yīng)該由哪個(gè)class來處理這一異常。如果應(yīng)該由source class來負(fù)責(zé),就把異常處理式留在原地。
            • 編譯target class。
            • 決定如何從source正確引用target object。
                • ==》可能會(huì)有一個(gè)現(xiàn)成的值域或函數(shù)幫助你取得target object。如果沒有,就看能否輕松建立一個(gè)這樣的函數(shù)。如果還是不行,你得在source class中新建一個(gè)新值域來保存target object。這可能是一個(gè)永久性修改,但你也可以讓它保持暫時(shí)的地位,因?yàn)楹罄^的其他重構(gòu)項(xiàng)目可能會(huì)把這個(gè)新建值域去掉。
            • 修改source method,使之成為一個(gè)delegating method(純委托函數(shù))。
            • 編譯,測試。
            • 決定[刪除source method]或?qū)⑺?dāng)作一個(gè)delegating method保留下來。
                • ==》如果你經(jīng)常要在source object中引用target method,那么將source method作為delegating method保留下來會(huì)比較簡單。
            • 如果你移除source method,請將source class中對(duì)source method的所有引用動(dòng)作,替換為[對(duì)target method的引用動(dòng)作]。
                • ==》你可以每修改一個(gè)引用點(diǎn)就編譯并測試一次。也可以通過一次[查找/替換]改掉所有引用點(diǎn),這通常簡單一些。
            • 編譯,測試。
          posted on 2005-08-30 10:51 ivaneeo 閱讀(163) 評(píng)論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 和林格尔县| 孝感市| 芜湖县| 华亭县| 新余市| 怀柔区| 明星| 大理市| 进贤县| 闸北区| 河北省| 仙桃市| 陇西县| 龙岩市| 比如县| 吉林市| 白玉县| 南投市| 朝阳县| 会同县| 永昌县| 睢宁县| 江西省| 夏津县| 镇雄县| 萨迦县| 怀化市| 宁明县| 金川县| 浪卡子县| 宣威市| 蒙山县| 临泉县| 富阳市| 鄂托克前旗| 乌什县| 内江市| 泸州市| 灵石县| 宁明县| 务川|