为什么在我使用 LINQ 时 Class 耦合跳转?
Why does Class Coupling jump when I use LINQ?
我有一个采用三个参数的方法:List<Class1> source
、List<Class2) results
和 DateTime endDate
。我明白为什么 class 耦合是四个。但是,当我添加以下语句时它会跳转到 ten:
var warnings = from s in source
join r in results on s.Field1 equals r.Field1 into joined
from j in joined.DefaultIfEmpty( )
where j == null
select string.Format( "{0}{1}", A_CONSTANT, s.Field2 );
我的问题:
- LINQ 语句引入的六个新 classes 是什么?
- 由于十是 "good code," 的上限,这是否表明 LINQ 在这里不是一个好的选择?
另外六个 class 可能是:
IEnumerable<string>
- 您的查询结果
IEnumerable<Class1>
-左边collection
IEnumerable<Class2>
-右边collection
Func<Class1, int>
- 连接表达式的左边部分
Func<Class2, int>
- 连接表达式的右边部分
Func<Class1, Class2, string>
- 投影
它也可能计算 Enumerable
class 因为查询被转换为静态扩展方法调用。
在任何一种情况下,代码分析似乎都没有忽略 Linq 使用的瞬态 classes(是否 应该 值得商榷)。我的建议是要么忽略它(也许手动计算耦合并注意差异)要么找到更好的分析工具。
另一个问题是:它会增加你的耦合度整体吗?我怀疑其中的几个 class 会在您的整个应用程序中使用,因此它可能不会对您的整体耦合产生重大影响。
我有一个采用三个参数的方法:List<Class1> source
、List<Class2) results
和 DateTime endDate
。我明白为什么 class 耦合是四个。但是,当我添加以下语句时它会跳转到 ten:
var warnings = from s in source
join r in results on s.Field1 equals r.Field1 into joined
from j in joined.DefaultIfEmpty( )
where j == null
select string.Format( "{0}{1}", A_CONSTANT, s.Field2 );
我的问题:
- LINQ 语句引入的六个新 classes 是什么?
- 由于十是 "good code," 的上限,这是否表明 LINQ 在这里不是一个好的选择?
另外六个 class 可能是:
IEnumerable<string>
- 您的查询结果IEnumerable<Class1>
-左边collectionIEnumerable<Class2>
-右边collectionFunc<Class1, int>
- 连接表达式的左边部分Func<Class2, int>
- 连接表达式的右边部分Func<Class1, Class2, string>
- 投影
它也可能计算 Enumerable
class 因为查询被转换为静态扩展方法调用。
在任何一种情况下,代码分析似乎都没有忽略 Linq 使用的瞬态 classes(是否 应该 值得商榷)。我的建议是要么忽略它(也许手动计算耦合并注意差异)要么找到更好的分析工具。
另一个问题是:它会增加你的耦合度整体吗?我怀疑其中的几个 class 会在您的整个应用程序中使用,因此它可能不会对您的整体耦合产生重大影响。