動機:乙個方法裡的引數過長,過長的引數列導致方法很難使用,因為這些引數太長難以理解,而且呼叫者和被呼叫者都必須記住這些引數的用途,另乙個原因是一旦需要更多資料,就可能要增加引數或者過載這個方法。所以消除過長引數往往能提高**的可讀性。
方法:一、如果引數的值是通過呼叫某個函式的結果得來的,則去掉該引數,讓接受該引數的函式直接呼叫該函式。
二、如果這些引數是來自同一實體物件,則傳遞這個實體物件過去即可,如果這個實體不存在,那就先建立乙個。
注意:如果被呼叫函式使用了 [來自另乙個物件的很多項資料」,這可能意味該函式實際上應該被定義在「那些資料所屬的物件」中。這時候可以考慮移動方法。
示例:
比如公司oa,有乙個頁面顯示某天某個人打卡記錄是否正常,顯示的格式如下:
當前日期
打卡人上班打卡時間
下班打卡時間
是否正常上下班
描述2012-04-17
zxz09:10
18:00
非正常遲到10分鐘
已知的資料值有「當前日期,打卡人,上班打卡時間,下班打卡時間」,根據已知的資料判斷「是否正常上下班,備註」,**如下:
1
2
3
4
5
6
7
8
9
10
//顯示考勤記錄
public
void
showcheckonworkattendancerecords()
//判斷是否正常上下班,並返回備註
public
bool isnormalwork(string currentdate, string userid, datetime workontime, datetime workofftime, out string description)
重構後的**如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//首先建立乙個實體存放引數裡的字段以及把返回的內容也放入欄位中
public
class
checkonworkattendancerecords
public
string userid
public
datetime workontime
public
datetime workofftime
public
bool isnormalwork
public
string description
}
//顯示考勤記錄
public
void
showcheckonworkattendancerecords()
//判斷是否正常上下班,並返回備註
public
void
isnormalwork(checkonworkattendancerecords checkonworkattendancerecords)
重構後,**更清晰易懂,不用在每次看isnormalwork方法時,去查詢和思考每個引數的內容,同時返回多個引數不用在out了,另外isnormalwork應該屬於邏輯層的邏輯,因此接下來可以把這個方法移到邏輯層相應的類中。
**
glest學習筆記2 重構
目前重構過程工作目錄 0.00 original 0.00 2 original.fps 0.02 move.render.renderunits.to.world.renderunits 0.04 harvest 0.06 firstattackcommand 0.08 2ccrepair.has...
31天重構學習筆記2 移動方法
摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年10月份,由於當時沒有訂閱sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都在使用,只是我們沒有專門把它...
31 天重構學習筆記2 移動方法
摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年10月份,由於當時沒有訂閱 sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專門...