在我当前的项目中,我们为代码指标“可维护性指数”和“循环复杂性”设定了一些目标。可维护性指数应为 60 或更高,循环复杂度应为 25 或更低。我们知道 60 或更高的可维护性指数是一个相当高的指数。
我们还使用很多 linq 来过滤/分组/选择实体。我发现这些 linq 查询在可维护性指数上的得分并不高。将此查询抽象为扩展方法给了我更高的可维护性指数,这很好。但在大多数情况下,扩展方法不再是通用的,因为我将它们与我的类型而不是通用类型一起使用。
例如下面的 linq-query vs 扩展方法:
LINQ查询
List.Where(m => m.BeginTime >= selectionFrom && m.EndTime <= selectionTo)
扩展方法:
public static IEnumerable<MyType> FilterBy(this IEnumerable<MyType> source, DateTime selectionFrom, DateTime selectionTo)
{
return (IEnumerable<MyType>)source.Where(m => m.BeginTime >= selectionFrom && m.EndTime <= selectionTo);
}
List.FilterBy(selectionFrom, selectionTo);
扩展方法使我的可维护性指数提高了 6 分,并提供了流畅的语法。另一方面,我必须添加一个静态类,它不是通用的。
关于哪种方法会让您受益的任何想法?或者可能对如何重构 linq 查询以提高可维护性索引有不同的想法?