31 天重構學習筆記13 提取方法物件

2021-09-20 22:58:02 字數 2247 閱讀 2922

摘要:由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2023年10月份,由於當時沒有 訂閱

sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專門把它標示和整理出來,所以也沒有引起多大的重視。現在突然接手這個重構專案,由於團隊成員技術和經驗參差不齊,所以有必要專門整 理乙個重構的綱要,當然這個系列也非常適合做新系統的**規範參考,只要有**的地方,這個重構規範就很有價值。週末也不想出去閒逛,因為在剛到這個美麗 的城市,沒有親戚或者朋友,所以才能靜下心來兩天時間寫完這個重構參考規範。同時也感受了windows live writer寫文章的快感。當然重構的整體架構得另當別論(整體架構在我的這篇文章有專門的講解(

大的架構設計好了以後,這些重構細節點就成了東風之後的大火,對整個專案也是至關重要。31天重構這個系列和《**大全》、《重構:改善既有**的設計》 比較起來最大的特點就是比較簡單、淺顯易懂。那麼我這些文章也都是學習sean chambers的31天重構的筆記整理,所以如果大家對這個筆記有任何異議也可以指出。

具體也可以通過

查 看原文。

概念:本文中的「提取方法物件」是指當你發現乙個方法中存在過多的區域性變數時,你可以通過使用「提取方法物件」重構來引入一些方法, 每個方法完成任務的乙個步驟,這樣可以使得程式變得更具有可讀性。

正文:如下**所示,

order 類 中的calculate方法要完成很多功能,在之前我們用「提取方法」來進行重構,現在我們採取「提取方法物件」來完成重構。

using system.collections.generic;

namespace lostechies.daysofrefactoring.extractmethodobject.before

}public class

order

private

ilist

discounts

private decimal tax

public decimal calculate()

// subtract discounts

foreach (decimal discount in discounts)

subtotal -= discount;

// calculate tax

decimal tax = subtotal * tax;

// calculate grandtotal

decimal grandtotal = subtotal + tax;

return grandtotal;}}

}

正如下**所示,我們引入了ordercalculator類,該類實現了所有的計算方法,order類將自身傳遞給 ordercalculator類並呼叫calculate方法完成計算過程。

using system.collections.generic;

namespace lostechies.daysofrefactoring.extractmethodobject.after

}public class

order

public

ienumerable

discounts

public decimal tax

public decimal calculate()

}public class

ordercalculator

private

ienumerable

orderlineitems

private

ienumerable

discounts

private decimal tax

public ordercalculator(order order)

public decimal calculate()

private void calculatesubtotal()

private void subtractdiscounts()

private void calculatetax()

}}

總結:本文的重構方法在有的時候還是比較有用,但這樣會造成欄位的增加,同時也會帶來一些維護的不便,它和「提取方法」最大的區別就 是乙個通過方法返回需要的資料,另乙個則是通過欄位來儲存方法的結果值,所以在很大程度上我們都會選擇「提取方法」。

31 天重構學習筆記10 提取方法

摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年10月份,由於當時沒有訂閱 sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專門...

31 天重構學習筆記10 提取方法

摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年10月份,由於當時沒有訂閱 sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專門...

31 天重構學習筆記10 提取方法

摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年10月份,由於當時沒有訂閱 sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專門...