日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

重构学习2-消除过长参数

發(fā)布時(shí)間:2024/9/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重构学习2-消除过长参数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

動(dòng)機(jī):一個(gè)方法里的參數(shù)過(guò)長(zhǎng),過(guò)長(zhǎng)的參數(shù)列導(dǎo)致方法很難使用,因?yàn)檫@些參數(shù)太長(zhǎng)難以理解,而且調(diào)用者和被調(diào)用者都必須記住這些參數(shù)的用途,另一個(gè)原因是一旦需要更多數(shù)據(jù),就可能要增加參數(shù)或者重載這個(gè)方法。所以消除過(guò)長(zhǎng)參數(shù)往往能提高代碼的可讀性。

方法:一、如果參數(shù)的值是通過(guò)調(diào)用某個(gè)函數(shù)的結(jié)果得來(lái)的,則去掉該參數(shù),讓接受該參數(shù)的函數(shù)直接調(diào)用該函數(shù)。

二、如果這些參數(shù)是來(lái)自同一實(shí)體對(duì)象,則傳遞這個(gè)實(shí)體對(duì)象過(guò)去即可,如果這個(gè)實(shí)體不存在,那就先創(chuàng)建一個(gè)。

注意:如果被調(diào)用函數(shù)使用了 [來(lái)自另一個(gè)對(duì)象的很多項(xiàng)數(shù)據(jù)」,這可能意味該函數(shù)實(shí)際上應(yīng)該被定義在「那些數(shù)據(jù)所屬的對(duì)象」中。這時(shí)候可以考慮移動(dòng)方法。

示例

比如公司OA,有一個(gè)頁(yè)面顯示某天某個(gè)人打卡記錄是否正常,顯示的格式如下:

當(dāng)前日期打卡人上班打卡時(shí)間下班打卡時(shí)間是否正常上下班描述
2012-04-17ZXZ09:1018:00非正常遲到10分鐘

已知的數(shù)據(jù)值有“當(dāng)前日期,打卡人,上班打卡時(shí)間,下班打卡時(shí)間”,根據(jù)已知的數(shù)據(jù)判斷“是否正常上下班,備注”,代碼如下:

?
1 2 3 4 5 6 7 8 9 10 //顯示考勤記錄 public void ShowCheckOnWorkAttendanceRecords() { ????string currentDate = DateTime.Now.ToString("yyyy-MM-dd");//當(dāng)前日期 ????string userID = "ZXZ";//打卡人 ????DateTime workOnTime = Convert.ToDateTime("2012-04-17 09:10:00");//上班打卡時(shí)間 ????DateTime workOffTime = Convert.ToDateTime("2012-04-17 18:00:00");//下班打卡時(shí)間 ????//判斷是否正常上下班,并返回備注 ????string description = ""; ???bool isNormalWork = IsNormalWork(currentDate, userID, workOnTime, workOffTime, out description);
?
1 2 3 4 5 6 7 8 9 10 ???//顯示內(nèi)容調(diào)用isNormalWork 和description這兩個(gè)值 } //判斷是否正常上下班,并返回備注 public bool IsNormalWork(string currentDate, string userID, DateTime workOnTime, DateTime workOffTime, out string description) { ????//邏輯判斷的方法省略...... ????//public bool calculate()...... ????description = "遲到10分鐘"; ????return true; }

重構(gòu)后的代碼如下:

?
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 //首先建立一個(gè)實(shí)體存放參數(shù)里的字段以及把返回的內(nèi)容也放入字段中 ????public class CheckOnWorkAttendanceRecords ????{ ????????public string CurrentDate { get; set; } ????????public string UserID { get; set; } ????????public DateTime WorkOnTime { get; set; } ????????public DateTime WorkOffTime { get; set; } ????????public bool IsNormalWork { get; set; } ????????public string Description { get; set; } ????} ????//顯示考勤記錄 ????public void ShowCheckOnWorkAttendanceRecords() ????{ ????????//判斷是否正常上下班,并返回備注 ????????CheckOnWorkAttendanceRecords checkOnWorkAttendanceRecords = new CheckOnWorkAttendanceRecords(); ????????checkOnWorkAttendanceRecords.CurrentDate = DateTime.Now.ToString("yyyy-MM-dd");//當(dāng)前日期 ????????checkOnWorkAttendanceRecords.UserID = "ZXZ";//打卡人 ????????checkOnWorkAttendanceRecords.WorkOnTime = Convert.ToDateTime("2012-04-17 09:10:00");//上班打卡時(shí)間 ????????checkOnWorkAttendanceRecords.WorkOffTime = Convert.ToDateTime("2012-04-17 18:00:00");//下班打卡時(shí)間 ????????IsNormalWork(checkOnWorkAttendanceRecords); ????????//顯示內(nèi)容可以直接調(diào)用checkOnWorkAttendanceRecords對(duì)象里的內(nèi)容即可 ????} ????//判斷是否正常上下班,并返回備注 ????public void IsNormalWork(CheckOnWorkAttendanceRecords checkOnWorkAttendanceRecords) ????{ ????????//邏輯判斷的方法省略...... ????????//public bool calculate()...... ????????checkOnWorkAttendanceRecords.Description = "遲到10分鐘"; ????}

重構(gòu)后,代碼更清晰易懂,不用在每次看IsNormalWork方法時(shí),去查詢和思考每個(gè)參數(shù)的內(nèi)容,同時(shí)返回多個(gè)參數(shù)不用在OUT了,另外IsNormalWork應(yīng)該屬于邏輯層的邏輯,因此接下來(lái)可以把這個(gè)方法移到邏輯層相應(yīng)的類中。

轉(zhuǎn):http://www.cnblogs.com/seesea125/archive/2012/04/17/2453256.html

總結(jié)

以上是生活随笔為你收集整理的重构学习2-消除过长参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。