重構的體會——類屬性優先移動

來源:互聯網
上載者:User

標籤:

  今天開始對一個別人寫的項目進行最佳化,我先把類之間的關係想好好,開始移動方法,相應的再移動相應的類屬性,改到後面,發現越改越多,基本上改完了所有方法重構就全部完成了,但是改動很大,而且中間沒有測試的機會,一直有錯誤,耦合的太緊密了,沒法一步一步的做,完成了大概一半的樣子,發現做不下去了,即使硬著頭皮做下去出錯的可能太大了,我沒把握重構後不出錯。

  沒辦法,又重新checkout了一份代碼,想了下,如果先移動方法,方法中包含了屬性,就要求屬性也進行相應的移動。但是如果只移動屬性,就可以通過如下方法很容易實現移動屬性,而相應的方法還在原來的位置。例如A類的a屬性,移動到B類中,A類的do()方法操作了a。這種情況可以將B類型的一個引用傳給A,把a移動到B類中並提供set/get方法。然後將A類中給a屬性賦值的地方全部替換成b.setA(),相應的擷取a的值的地方替換成b.getA(),這樣就實現了類屬性的移動。完成了這一步,整個程式跟原來是等價的,可以直接驗證。因為沒有修改方法的調用,且邏輯不複雜,故出錯的幾率要小很多。

public class A {  private T a;  public String do() {    a = new T();    System.out.println("a:"+a.getValue());    return  a.getValue();  }    }class T {    private String value;  
  // setValue/getValue ……}

 

移動屬性後的結果

public class A {  private B b;    public String do() {    b.setA(new T());    System.out.println("a:"+b.getA().getValue());    return b.getA().getValue();  }  }class B {  private T a;    // setA/getA ……}

如果只是看這個小例子,看不出移動屬性後有什麼好處,但是在一個遺留項目中的某一個類包含多許多不應該在該類中的屬性時,且該類的許多方法都要用到這些屬性時,這樣將屬性移到本來應該的位置中,就能夠清晰每個類的職責,對後面的重構是一個基礎。

 

重構的體會——類屬性優先移動

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.