在我当前的项目中,我们为代码度量“可维护性索引”和“Cyclometic Complexity”设定了一些目标。可维护性指数应为60或更高,Cyclometic的复杂性为25或更低。我们知道60和更高的可维护性指数是相当高的。我们还使用了很多linq来过滤/分组/选择实体。我发现这些linq查询在可维护性指数上的得分并不高。 把这个查询抽象成扩展方法给了我一个更高的可维护性指数,这是很好的。但在大多数情况下,扩展方法不再是通用的,因为我将它们与我的类型(而不是泛型)一起使用。您是否将您的LINQ查询抽象为扩展方法
例如,下面的LINQ查询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查询来改进可维护性索引,可能有不同的想法?
度量标准仅仅是一种度量,但从来不是一个目标。 – 2011-06-08 09:01:46
我对任何一个无法解释的黑盒子的维修性指数都持怀疑态度。至少循环复杂性可以确定实际测量的内容。你知道它是否解释过[无]解释[这里](http://msdn.microsoft.com/en-us/library/bb385914.aspx)? – AakashM 2011-06-08 10:04:05