ivaneeo's blog

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

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          作法(Mechanics)
            • 檢查source class定義之source method所使用的一切特性(features),考慮它們是否也該被搬移。
                • ==》如果某個特性只被你打算搬移的那個函數用到,你應該將它一并搬移。如果另有其他函數使用了這個特性,你可以考慮將使用該特性的所有函數全部一并搬移。有時侯搬移一組函數比逐一搬移簡單些。
            • 檢查source class的subclass和superclass,看看是否有該函數的其他聲明。
                • ==》如果出現其他聲明,你或許無法進行搬移,除非target class也同樣表現出多態性(polymorphism)。
            • 在target class中聲明這個函數。
                • ==》你可以為此函數選擇一個新名稱 -- 對target class更有意義的名稱。
            • 將source method的代碼拷貝到target method中。調整后者,使其能在新家中正常運行。
                • ==》如果target method使用了source特性,你得決定如何從target method引用source object。如果target class中沒有相應的引用機制,就把source object reference當作參數,轉給新建立的target method。
                • ==》如果source method包含異常處理式(exception handler),你得判斷邏輯上應該由哪個class來處理這一異常。如果應該由source class來負責,就把異常處理式留在原地。
            • 編譯target class。
            • 決定如何從source正確引用target object。
                • ==》可能會有一個現成的值域或函數幫助你取得target object。如果沒有,就看能否輕松建立一個這樣的函數。如果還是不行,你得在source class中新建一個新值域來保存target object。這可能是一個永久性修改,但你也可以讓它保持暫時的地位,因為后繼的其他重構項目可能會把這個新建值域去掉。
            • 修改source method,使之成為一個delegating method(純委托函數)。
            • 編譯,測試。
            • 決定[刪除source method]或將它當作一個delegating method保留下來。
                • ==》如果你經常要在source object中引用target method,那么將source method作為delegating method保留下來會比較簡單。
            • 如果你移除source method,請將source class中對source method的所有引用動作,替換為[對target method的引用動作]。
                • ==》你可以每修改一個引用點就編譯并測試一次。也可以通過一次[查找/替換]改掉所有引用點,這通常簡單一些。
            • 編譯,測試。
          posted on 2005-08-30 10:51 ivaneeo 閱讀(163) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 界首市| 日土县| 大余县| 彭州市| 长乐市| 江达县| 团风县| 杂多县| 襄城县| 阳西县| 叶城县| 台中市| 建昌县| 太湖县| 海南省| 宜良县| 同心县| 三穗县| 分宜县| 邳州市| 新河县| 伊吾县| 三门峡市| 腾冲县| 恩施市| 买车| 金堂县| 稷山县| 临桂县| 大厂| 利川市| 灵寿县| 兴安县| 尖扎县| 东阳市| 南安市| 师宗县| 武定县| 西乌珠穆沁旗| 新宁县| 青神县|