你是如何消除重复代码的狂热者?
就个人而言,每当我看到重复代码时,无论是在测试代码还是生产中,我都倾向于重复复制.我唯一的例外是这些:
有时复制的减少非常小,因为新重构的方法有太多参数实际上不可用/可读.
有时候,在测试代码中,当几个测试使用相同的代码而不是真正的连贯流程时,我只留下复制(但并非总是如此 - 取决于重复大小).
Huntrods.. 17
我一直坚持第一次复制(即原件加一份)通常不值得去除的原则.这是因为原件加一份副本可能是"一次性",并且你没有获得足够的去除它们以证明工作的合理性.
但是,一旦我开始制作第二个副本,然后我重写所有三个以删除重复.那是因为它现在(在我看来)从"一次性"变为"趋势".我将更有可能再次使用代码,因此删除重复项的努力现在值得.
我毫不犹豫地将这个过程称为"重构",因为这是XP阵营的流行语,我在80年代早期用FORTRAN和C做了这个.
良好的编程习惯是永恒的(通常也是时髦的).
干杯,
-Richard
我一直坚持第一次复制(即原件加一份)通常不值得去除的原则.这是因为原件加一份副本可能是"一次性",并且你没有获得足够的去除它们以证明工作的合理性.
但是,一旦我开始制作第二个副本,然后我重写所有三个以删除重复.那是因为它现在(在我看来)从"一次性"变为"趋势".我将更有可能再次使用代码,因此删除重复项的努力现在值得.
我毫不犹豫地将这个过程称为"重构",因为这是XP阵营的流行语,我在80年代早期用FORTRAN和C做了这个.
良好的编程习惯是永恒的(通常也是时髦的).
干杯,
-Richard
避免将代码分解到配置参数(需要改变行为)的代码,这会妨碍代码的意图.在你达到这一点之前尽量去......但这是一种平衡行为.
如前所述,我试图遵循"干"原则 - 但我也说有另一种情况,我经常不愿意消除重复:
不要修改您没有(或不能经济地/实际地开发)单元测试的代码.
这组测试将包括提取的任何方法的调用代码.
如果我无法测试它,我不能说我没有引入缺陷.有了测试套件,我至少可以说它已经完成了以前的工作.
在消除代码重复方面,我认为自己是一个极端的狂热分子.只要我们没有达到里程碑的关键点,我会尽力删除我在代码中遇到的任何重复代码.最终,我只是耗尽时间,不得不单独留下代码用于下一个里程碑.在这种情况下,我经常至少检查一条评论,注意到重复以及需要采取哪些措施来删除它.
我总是首先想到为什么这个代码是重复的.大多数时候,答案是懒惰/无知/等等,我重构.但是,偶尔会出现重复实际有效的情况.我这里讲的是两段代码在语义上无关,只是碰巧有相同(或相似)实现的时刻.例如,考虑完全不相关(实际)流程的业务规则.规则可能等于一天,然后第二天其中一个更改.你最好希望它们不是由相同的代码表示,或者祈祷进行修改的开发人员可以发现正在发生的事情(单元测试,任何人?)).
我们努力工作.有一个检测这种重复的工具确实很有帮助; 无论最好的意图如何,都是因为一个人没有想到,或者时间紧迫等等.
该CloneDR发现重复的代码,既精确副本和近门柱,在大源系统,通过的langauge语法参数.它支持Java,C#,COBOL,C++,PHP和许多其他语言.我们自己使用它来帮助管理我们自己的代码.