降低代码重复度:我所谓的代码重复指的不仅仅是多行一模一样的代码,同时也包括一些重复复制或是没必要的一些代码,如以下下代码:
复制代码
1 public void 重复代码示例(int? 参数一)
2 {
3 if (参数一 != null)
4 {
5 //处理代码....
6 }
7 else
8 {
9 参数一 = null;
10 //处理代码.....
11 }
12
13 //处理代码.....
14
15 }
复制代码
可能有的朋友在第一眼看到这段代码时会说,这个没什么问题啊 ,哪有什么重复呀?真的就没有重复么?这段代码真的没有什么问题么?
那么请问下这个else里面的" 参数一 = null;" 这行代码有意义么?毕竟只有"参数一"为空时才会满足else分支条件,才会进入这个分支,也就是说你已经知道啦这个为null的时候又去给他赋值为null,这个算不算是重复呢?
可能有的朋友会说谁会写这样的代码呀,其实这种代码是我在项目中看到过类似的代码的,
让代码重构渐行渐远系列(2)——降低代码重复度
。其实写出来这样的代码也没什么好奇怪的,因为有时候顺着业务逻辑走时就真的有可能会遇到这种问题的。简单来说,上面的示例代码可以重构成如下代码:
复制代码
1 public void 重复代码示例(int? 参数一)
2 {
3 if (参数一 != null)
4 {
5 //处理代码....
6 }
7
8 //处理代码.....
9
10 }
复制代码
接下啦就让我们看看我们比较熟悉的重复代码形式吧:
复制代码
public void 重复代码示例方法一(string 参数一)
{
TestModel model = new TestModel();
if (!string.IsNullOrEmpty(参数一))
{
model.Name = 参数一;
model.Age = 0;
model.Creator = "当前用户";
model.CreateTime = DateTime.Now;
//逻辑代码
}
}
public void 重复代码示例方法二(int? 参数二)
{
TestModel model = new TestModel();
if (参数二 != null)
{
model.Age = 参数二.Value;
model.Creator = "当前用户";
model.CreateTime = DateTime.Now;
//逻辑代码
}
}
复制代码
复制代码
public class TestModel
{
public string Name { set; get; }
public int Age { set; get; }
public string Creator { set; get; }
public DateTime CreateTime { set; get; }
}
复制代码
那么我是否也可以重构一下以便减少重复代码呢?我想你也不想重复写代码吧!
复制代码
1 public void 重复代码示例方法一(string 参数一)
2 {
3 TestModel model = new TestModel();
4 if (!string.IsNullOrEmpty(参数一))
5 {
6 model.Name = 参数一;
7 model.Age = 0;
8 NewMethod(model);
9 //逻辑代码
10 }
11
12 }
13
14 public void 重复代码示例方法二(int? 参数二)
15 {
16 TestModel model = new TestModel();
17 if (参数二 != null)
18 {
19 model.Age = 参数二.Value;
20 NewMethod(model);
21 //逻辑代码
22 }
23
24 }
25
26 private static void NewMethod(TestModel model)
27 {
28 model.Creator = "当前用户";
29 model.CreateTime = DateTime.Now;
30 }
复制代码
这么一来,如果以后业务改变了,需要修改创建人和时间时我们就只需要修改 NewMethod(TestModel model) 这一个方法了,而不用修改原先的两处了,是不是相对的减少了代码重复度的同时,也便于维护呢?
当然啦,由于本人能力有限,以上示例不是特别恰当,但是我想说的是这种思想,减少重复代码,减低代码重复度的思想,
电脑资料
《让代码重构渐行渐远系列(2)——降低代码重复度》(http://meiwen.anslib.com)。还是那句话,如果我们在写代码的时候就考虑到了这些我们还需要再花时间做此种重构么?代码重构怎能不渐行渐远呢?