我试图在我公司的一个 .NET 程序集中解开许多相互依赖的类型。
第一步似乎是学习几个类,看看每个类的哪些成员导致它们相互依赖。
我怎样才能用 NDepend 做到这一点?如果我有TypeA和TypeB,我可以写什么CQLinq来询问TypeA中所有使用TypeB的方法,以及TypeB中所有使用TypeA的方法?
首先,您可以使用此查询来匹配所有相互依赖的类型(您可能需要增加 CQLinq 运行超时,因为它是 O(nbTypes^2) 查询)
from t1 in Application.Types
from t2 in Application.Types
where
t1 != t2 &&
string.Compare(t1.FullName, t2.FullName) == 1 &&
t1.IsUsing(t2) && t2.IsUsing(t1)
select new { t1, t2 }
然后对于每一对,您可以将两种类型导出到矩阵列和行,如屏幕截图所示。然后右键单击黑色单元格(黑色 coz 类型是相互依赖的),单击打开此依赖项
等等,罪魁祸首现在很明显
顺便说一句,第一个查询可以这样细化,查询结果中匹配的方法组也可以导出到右键菜单中的矩阵
from t1 in Application.Types
from t2 in Application.Types
where
t1 != t2 &&
string.Compare(t1.FullName, t2.FullName) == 1 &&
t1.IsUsing(t2) && t2.IsUsing(t1)
select new { t1, t2,
methodsOf1Using2 = t1.Methods.UsingAny(t2.Members),
methodsOf2Using1 = t2.Methods.UsingAny(t1.Members)
}
处理依赖关系的相关文档: