清洁代码和重构。额外的局部变量

时间:2012-06-22 12:13:48

标签: .net coding-style refactoring

我们在团队中对代码的小和平进行了大量讨论。

示例1 开发人员添加了额外的局部变量,以使代码更具可读性。在局部变量中,他从常数中保存了值。

示例2 相同的代码没有额外的变量,但从开发人员的角度来看可读性较差。

您认为更具可读性? 从重构的角度来看更好吗?

1

var tolerance = Constants.DateTypeGeneratorTolerance;

var dayType = DateTypeGenerator.GenerateDateType(
                courseTripValidity,
                tolerance,
                symbols,
                startDate,
                endDate);

2

var dayType = DateTypeGenerator.GenerateDateType(
                courseTripValidity,
                Constants.DateTypeGeneratorTolerance,
                symbols,
                startDate,
                endDate);

1 个答案:

答案 0 :(得分:1)

对此没有明确的答案,但我个人更喜欢后一版本。恕我直言Constants.DateTypeGeneratorTolerance并不长得令人难以忍受(尽管离这一点也不远)。如果它的名字被很好地选择,它会准确地说出它的含义。引入局部变量会使空间变得混乱,使我更难以跟踪正在发生的事情 - 不仅在直接读取代码时,而且搜索此常量的用法也更加麻烦。

此外,名称本身很长,主要是因为它包含范围界定信息。通过将所有全局常量放入单个类中,您需要使用命名前缀(如DateTypeGenerator)来区分它们。然而,如果您将常量移动到逻辑上属于的位置 - 无论是DateTypeGenerator本身还是单独的DateTypeGeneratorConstants类,常量名称本身都会变得简洁明快。

请注意,多种语言提供了特殊功能,以减少对限定符的需求,从而缩短名称。例如Java中的静态导入,或C#中的using指令。

将上述内容与C#using指令结合起来:

using Tolerance = DateTypeGenerator.Tolerance;

...

DateType dayType = DateTypeGenerator.GenerateDateType(
                courseTripValidity,
                Tolerance,
                symbols,
                startDate,
                endDate);