C#代码整洁之道:代码重构与性能提升
上QQ阅读APP看书,第一时间看更新

4.4 避免重复代码

代码可以是DRY或是WET的。WET即每次都需要编写的代码(Write Every Time),而其反义词就是DRY,即避免重复代码(Don't Repeat Yourself)。WET的代码很容易包含缺陷。当你接到测试团队或客户报告的一个缺陷并将其修复之后,它还会再次出现,并且来回修复的次数和这段代码在程序中出现的次数一样多。

让我们来移除这些重复代码,即将WET的代码替换为DRY的代码。其中一种方式是将这些代码抽取出来放在一个方法中,并将该方法集中起来,确保在程序中任何需要它的地方都可以访问它。

在以下范例中,假定我们有一个由NameAmout属性组成的费用项目集合,并期望通过Name来获得十进制类型的Amount

代码如下:

假设这种操作会出现100次,当然我们可以将上述代码写100次。但是若能找到一种仅仅编写一次的方式,则不但可以减少代码长度,还可以提高开发效率。以下代码展示了具体的做法:

使用上述代码,如需从ViewModelExpenseLines集合中获得数值,只需将相应项目的名称传递给GetValueName(string name)方法即可。如以下代码所示:

上面这一行代码是简单易懂的,而具体获得值的代码都包含在这一个方法中。因此,不论该方法出于什么原因需要进行更改(例如,修正某个缺陷),都只需更改这一处即可。

编写良好的函数的下一个逻辑步骤是尽可能减少参数数量。在4.5节中,我们将研究为何函数不应该拥有两个以上的参数,以及如何在需要更多参数时只使用一到两个参数。