現在のプロジェクトでは、コード メトリクスの「保守性インデックス」と「サイクロメティック複雑度」の目標を設定しました。保守性指数は 60 以上で、循環的複雑度は 25 以下である必要があります。保守性指数 60 以上はかなり高い値であることがわかっています。
また、エンティティをフィルタリング/グループ化/選択するために多くの linq を使用します。これらの linq クエリは、Maintainability Index でそれほど高く評価されていないことがわかりました。このクエリを拡張メソッドに抽象化することで、より高い保守性インデックスが得られます。これは良いことです。しかし、ほとんどの場合、拡張メソッドはもはやジェネリックではありません。これは、ジェネリック型の代わりに自分の型で拡張メソッドを使用するためです。
たとえば、次の linq-query と拡張メソッドの比較:
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);
拡張メソッドにより、Maintainability Index が 6 ポイント向上し、流暢な構文が得られます。一方、静的クラスを追加する必要がありますが、それは一般的ではありません。
どのようなアプローチが有利になるかについてのアイデアはありますか? または、linq クエリをリファクタリングして保守性インデックスを改善する方法について、別のアイデアをお持ちですか?