現在回過頭來看項目中以前寫的代碼,發現有好多的controller文件的行數是非常多的,甚至有時候打開一個controller的時候會導致編輯器卡住或CPU使用率瞬間飆升,風扇聲音都有些刺耳.
如果仔細閱讀和分析這些代碼就會發現,其實有好多代碼是本不應該放在這里的,一般情況下這些代碼是我們系統的業務邏輯,常常是一個action就像一個意大利面條一樣順滑,整個業務邏輯代碼一擼到底,其實這些業務邏輯都可以拆分成單獨的邏輯功能封裝成一個函數,來供這里和其他地方調用,可是我們并沒有這樣做,這就導致有些比較獨立的邏輯在各個地方被無數次的重復書寫,所以我們的controller的代碼量急劇飆升.
例如:
# status 代碼表通過審核
if employee.archive and employee.archive.status==1
# some code
end
如上是一個非常簡單的例子,如果放到controller中判斷,那么每個需要這個判斷的地方都需要寫上面的一串代碼,并且從程序的字面意思上還不能讀懂這個判斷到底是在判斷什么,如果把上面的代碼改為下面的我覺得就會好一些
def archive_valid?
archive && archive.status==1
end
if employee.archive_valid?
end
這只是一個非常簡單的邏輯封裝,如果我們的代碼都像上面這樣封裝好的話,我想我們的controller中就不會有這么長的代碼,以及這么多的數據庫查詢語句了吧(因為我們的查詢語句會封裝到我們的方法中了)
所以,我們在coding的時候,不能僅僅是為了要實現功能,而把代碼像意大利面條一樣一擼到底,我們要考慮邏輯的封裝,要考慮函數封裝的原子性,而不是把很多邏輯混合到一個函數中,只有這樣我們的代碼復用率才能提高,我們的controller才不會這么fat,我們的model才不會這么thin.