讓代碼重構(gòu)漸行漸遠(yuǎn)系列(2)——降低代碼重復(fù)度 -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【clearvueentertainment.com - 電腦資料】

    降低代碼重復(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ì)遇到這種問題的。

    簡(jiǎn)單來說,上面的示例代碼可以重構(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://clearvueentertainment.com)。

    還是那句話,如果我們?cè)趯懘a的時(shí)候就考慮到了這些我們還需要再花時(shí)間做此種重構(gòu)么?代碼重構(gòu)怎能不漸行漸遠(yuǎn)呢?

最新文章