我們經常可以在一些原來的**中見到一些類明確違反了srp原則(單一原則),這些類通常以「utils」或「manager」字尾結尾,但有時這些類也沒有這些特徵,它僅僅是多個類多個方法的組合。另乙個關於上帝類的特徵是通常這些類中的方法被用注釋分隔為不同的分組。那麼久而久之,這些類被轉換為那些沒有人願意進行歸併到合適類的方法的聚集地,對這些類進行重構是將類中的**按照職責分派到各自的類中,這樣就解除了上帝類,也減輕了維護的負擔。
using system.collections.generic;
using lostechies.daysofrefactoring.encapsulatecollection.after;
using lostechies.daysofrefactoring.samplecode.breakmethod.after;
using customer = lostechies.daysofrefactoring.breakresponsibilities.after.customer;
namespace lostechies.daysofrefactoring.samplecode.removegodclasses.before
public
bool
customerisvalid(customer customer, order order)
public ienumerable gatherordererrors(ienumerableproducts, customer customer)
public
void
register(customer customer)
public
void
forgotpassword(customer customer)
}}
我們看到要重構上面的**是很簡單的,只要將相關的方法按職責分派到對應的類中即可,帶來的好處就是這會降低**的顆粒度並減少未來維護**的成本。下面是重構後的**,它將上面
的**按照職責分為了兩個不同的類。
using system.collections.generic;
using lostechies.daysofrefactoring.encapsulatecollection.after;
using lostechies.daysofrefactoring.samplecode.breakmethod.after;
using customer = lostechies.daysofrefactoring.breakresponsibilities.after.customer;
namespace lostechies.daysofrefactoring.samplecode.removegodclasses.after
public
bool
customerisvalid(customer customer, order order)
public ienumerable gatherordererrors(ienumerableproducts, customer customer)
}public
class customerregistrationservice
public
void
forgotpassword(customer customer)
}}
小酌重構系列 12 去除上帝類
神說 要有光 就有了光。聖經 上帝要是會寫程式,他寫的類一定是 上帝類 程式設計師不是上帝,不要妄想成為上帝,但程式設計師可以寫出 上帝類 上帝是唯一的,上帝的光芒照耀人間,上帝是很愛面子的,他知道程式設計師寫了 上帝類 搶了他的風頭,於是他降下神罰要懲戒程式設計師。既然你寫了 上帝類 那麼就將你流...
31 天重構學習筆記27 去除上帝類
摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年 10月份,由於當時沒有訂閱 sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專...
31 天重構學習筆記27 去除上帝類
摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年 10月份,由於當時沒有訂閱 sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專...