我试图在我公司的一个.NET程序集中解开许多严重相互依赖的类型。
似乎第一步是采取几个课程,看看每个课程的成员是否相互依赖。
如何使用NDepend执行此操作?如果我有TypeA和TypeB,我可以写什么CQLinq来询问TypeA中使用TypeB的所有方法,以及TypeB中使用TypeA的所有方法?
答案 0 :(得分:1)
首先,您可以使用此查询来匹配所有相互依赖的类型(您可能需要增加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类型是相互依赖的),单击打开此依赖项
etvoilà,罪魁祸首现在很明显
顺便说一下,第一个查询可以这样改进,查询结果中匹配的方法组也可以在右键菜单中导出到矩阵
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)
}
处理依赖关系的相关文档: