让代码重构渐行渐远系列(2)——降低代码重复度

  降低代码重复度:我所谓的代码重复指的不仅仅是多行一模一样的代码,同时也包括一些重复复制或是没必要的一些代码,如以下下代码:

 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,这个算不算是重复呢?

  可能有的朋友会说谁会写这样的代码呀,其实这种代码是我在项目中看到过类似的代码的。其实写出来这样的代码也没什么好奇怪的,因为有时候顺着业务逻辑走时就真的有可能会遇到这种问题的。

  简单来说,上面的示例代码可以重构成如下代码:

 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) 这一个方法了,而不用修改原先的两处了,是不是相对的减少了代码重复度的同时,也便于维护呢?

  当然啦,由于本人能力有限,以上示例不是特别恰当,但是我想说的是这种思想,减少重复代码,减低代码重复度的思想。

  还是那句话,如果我们在写代码的时候就考虑到了这些我们还需要再花时间做此种重构么?代码重构怎能不渐行渐远呢?

 

以下是系列文章链接:

让代码重构渐行渐远系列(1)——解除多层嵌套

时间: 2024-10-09 21:49:19

让代码重构渐行渐远系列(2)——降低代码重复度的相关文章

让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较

重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提高效率,同时也能培养阶梯人才.各个小分队为了“统一”代码风格,提高成员的代码能力以便最终能提高项目代码质量,减少以后的维护成本,最终决定“每日”进行小组内的代码走查/审查(Code Review),然后进行代码重构. 直接比较与非比较:我所谓的直接比较与非比较是指"=="判断方式与&quo

让代码重构渐行渐远系列(1)——解除多层嵌套

重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提高效率,同时也能培养阶梯人才.各个小分队为了“统一”代码风格,提高成员的代码能力以便最终能提高项目代码质量,减少以后的维护成本,最终决定“每日”进行小组内的代码走查/审查(Code Review),然后进行代码重构. 解除多层嵌套:我所谓的多层嵌套是指的如下代码: 1 public bool 多层嵌

代码重构之单元测试

代码重构之单元测试 代码重构即不改变原有的功能的前提下修改代码之间的关系,简单来讲就是让代码更简洁.易读,可维护性更高,并不削弱程序的原有功能.而在重构过程中一个重要的主题就是单元测试--保证每一步修改都不会改变程序的功能.为了消除繁琐的编码,测试过程,重构工具是必不可少的,通过重构工具,只需编写少量的代码就可进行单元测试. 首先,下载并安装重构工具:ReSharper 或其他工具 : 打开 Visual Studio 2013 -> 工具  -> 扩展和更新 -> 联机 -> R

计算器界面代码重构

计算器界面代码重构什么是软件开发过程中的重构?重构(Refactoring)——以改善代码质量为目的代码重写 使其软件的设计和架构更加合理 提高软件的扩展性和维护性 代码实现与代码重构不同——代码实现 按照设计编程实现,重心在于功能实现——代码重构 以提高代码质量为目的软件架构设计 区别: 代码实现时不考虑架构的好坏,只考虑功能的实现 代码重构时不能影响已实现的功能,只考虑架构的改善 QCalculatorUI.h #ifndef _QCALCULATORUI_H_ #define _QCALC

CSS代码重构

CSS代码重构的目的 我们写CSS代码时,不仅仅只是完成页面设计的效果,还应该让CSS代码易于管理,维护.我们对CSS代码重构主要有两个目的:1.提高代码性能2.提高代码的可维护性 提高代码性能 提高CSS代码性能主要有两个点:1.提高页面的加载性能提高页面的加载性能,简单说就是减小CSS文件的大小,提高页面的加载速度,尽可以的利用http缓存2.提高CSS代码性能不同的CSS代码,浏览器对其解析的速度也是不一样的,如何提高浏览器解析CSS代码的速度也是我们要考虑的 提高代码的可维护性 提高CS

CSS代码重构与优化之路

写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多,如果没有及时对CSS代码进行维护,CSS代码不断会越来越多.CSS代码交错复杂,像一张庞大的蜘蛛网分布在网站的各个位置,你不知道修改这行代码会有什么影响,所以如果有修改或增加新功能时,开发人员往往不敢去删除旧的冗余的代码,而保险地增加新代码,最终的坏处就是项目中的CSS会越来越多,最终陷入无底洞. CSS代码重构的目的 我们写CSS代码时,不仅仅只是完成页面设计的效果,还应该让CSS代码易于管理,维护.我们对CSS

基于Table方法降低代码圈复杂度

描述: 在项目开发过程中,经常要求圈复杂度不能超过10,有时候写着写着圈复杂度就很大,我在项目代码中见过函数圈复杂度大于100的函数,由于历史的原因,代码越积越多,没人出去重构,导致后面很难懂和维护,所以在编码初期就应该在心中有个要求,就是圈复杂度不能超过10,如果超过10,肯定是代码逻辑写的过于复杂,要回过头来 想想怎么去分解功能,让流程简单易懂. 本文主要通过一些例子来介绍基于Table方式降低圈复杂度的过程. 例子1:一个简单的游戏控制函数 你可能会遇到如下类似的代码: if(strcmp

《重构:改善既有代码的设计》读书笔记

??如果一个人没有听说过<重构>这本书,那么他一定不敢说自己是程序员:如果一个人没有阅读过<重构>这本书,那么很难想象他会是一名优秀的程序员.这本书是很多公司要求Java程序员必读的三本书之一(另外两本书是<Java编程思想>和<Effective Java>),其实无关编程语言,是程序员就能够从这本书中受益. ??何谓重构?重构是对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本.重构是用微小的步伐修改程序,在这个

常用的6种代码重构方法帮你提升80%的代码质量

在过去做了不少代码走读,发现了一些代码质量上比较普遍的问题,以下是其中的前五名: 臃肿的类: 类之所以会臃肿,是因为开发者缺乏对最基本的编码原则,即“单一职责原则”(SRP)的理解.这些类往往会变得很臃肿,是由于不同的且在功能上缺少关联的方法都放在了相同的类里面. 长方法: 方法之所以会变得很长主要是有以下几个原因: 许多没有关联性的.功能复杂的模块的代码都放在相同的方法内.这主要是开发者缺乏SRP的概念. 多种条件都放在同一个方法内,这在长方法内经常会发生的.这是由于缺乏McCabe代码复杂度