降低代碼重復(fù)度:我所謂的代碼重復(fù)指的不僅僅是多行一模一樣的代碼,同時(shí)也包括一些重復(fù)復(fù)制或是沒必要的一些代碼,如以下下代碼:
復(fù)制代碼
1 public void 重復(fù)代碼示例(int? 參數(shù)一)
2 {
3 if (參數(shù)一 != null)
4 {
5 //處理代碼....
6 }
7 else
8 {
9 參數(shù)一 = null;
10 //處理代碼.....
11 }
12
13 //處理代碼.....
14
15 }
復(fù)制代碼
可能有的朋友在第一眼看到這段代碼時(shí)會(huì)說,這個(gè)沒什么問題啊 ,哪有什么重復(fù)呀?真的就沒有重復(fù)么?這段代碼真的沒有什么問題么?
那么請(qǐng)問下這個(gè)else里面的" 參數(shù)一 = null;" 這行代碼有意義么?畢竟只有"參數(shù)一"為空時(shí)才會(huì)滿足else分支條件,才會(huì)進(jìn)入這個(gè)分支,也就是說你已經(jīng)知道啦這個(gè)為null的時(shí)候又去給他賦值為null,這個(gè)算不算是重復(fù)呢?
可能有的朋友會(huì)說誰會(huì)寫這樣的代碼呀,其實(shí)這種代碼是我在項(xiàng)目中看到過類似的代碼的,
讓代碼重構(gòu)漸行漸遠(yuǎn)系列(2)——降低代碼重復(fù)度
。其實(shí)寫出來這樣的代碼也沒什么好奇怪的,因?yàn)橛袝r(shí)候順著業(yè)務(wù)邏輯走時(shí)就真的有可能會(huì)遇到這種問題的。簡單來說,上面的示例代碼可以重構(gòu)成如下代碼:
復(fù)制代碼
1 public void 重復(fù)代碼示例(int? 參數(shù)一)
2 {
3 if (參數(shù)一 != null)
4 {
5 //處理代碼....
6 }
7
8 //處理代碼.....
9
10 }
復(fù)制代碼
接下啦就讓我們看看我們比較熟悉的重復(fù)代碼形式吧:
復(fù)制代碼
public void 重復(fù)代碼示例方法一(string 參數(shù)一)
{
TestModel model = new TestModel();
if (!string.IsNullOrEmpty(參數(shù)一))
{
model.Name = 參數(shù)一;
model.Age = 0;
model.Creator = "當(dāng)前用戶";
model.CreateTime = DateTime.Now;
//邏輯代碼
}
}
public void 重復(fù)代碼示例方法二(int? 參數(shù)二)
{
TestModel model = new TestModel();
if (參數(shù)二 != null)
{
model.Age = 參數(shù)二.Value;
model.Creator = "當(dāng)前用戶";
model.CreateTime = DateTime.Now;
//邏輯代碼
}
}
復(fù)制代碼
復(fù)制代碼
public class TestModel
{
public string Name { set; get; }
public int Age { set; get; }
public string Creator { set; get; }
public DateTime CreateTime { set; get; }
}
復(fù)制代碼
那么我是否也可以重構(gòu)一下以便減少重復(fù)代碼呢?我想你也不想重復(fù)寫代碼吧!
復(fù)制代碼
1 public void 重復(fù)代碼示例方法一(string 參數(shù)一)
2 {
3 TestModel model = new TestModel();
4 if (!string.IsNullOrEmpty(參數(shù)一))
5 {
6 model.Name = 參數(shù)一;
7 model.Age = 0;
8 NewMethod(model);
9 //邏輯代碼
10 }
11
12 }
13
14 public void 重復(fù)代碼示例方法二(int? 參數(shù)二)
15 {
16 TestModel model = new TestModel();
17 if (參數(shù)二 != null)
18 {
19 model.Age = 參數(shù)二.Value;
20 NewMethod(model);
21 //邏輯代碼
22 }
23
24 }
25
26 private static void NewMethod(TestModel model)
27 {
28 model.Creator = "當(dāng)前用戶";
29 model.CreateTime = DateTime.Now;
30 }
復(fù)制代碼
這么一來,如果以后業(yè)務(wù)改變了,需要修改創(chuàng)建人和時(shí)間時(shí)我們就只需要修改 NewMethod(TestModel model) 這一個(gè)方法了,而不用修改原先的兩處了,是不是相對(duì)的減少了代碼重復(fù)度的同時(shí),也便于維護(hù)呢?
當(dāng)然啦,由于本人能力有限,以上示例不是特別恰當(dāng),但是我想說的是這種思想,減少重復(fù)代碼,減低代碼重復(fù)度的思想,
電腦資料
《讓代碼重構(gòu)漸行漸遠(yuǎn)系列(2)——降低代碼重復(fù)度》(http://m.stanzs.com)。還是那句話,如果我們?cè)趯懘a的時(shí)候就考慮到了這些我們還需要再花時(shí)間做此種重構(gòu)么?代碼重構(gòu)怎能不漸行漸遠(yuǎn)呢?