我正在尝试分析程序集引用应该是有向无环图但不是的应用程序。还有一个子组件引用一个子子组件的不同版本的相关问题(想想埃舍尔......)
我想要做的是分析每个装配-子装配对并构建出问题所在的图片。
我需要一些关于什么是好的数据结构的指导。我不太确定我是否可以建立一个不可变的,但我不介意让它在内部是可变的,然后在最后转换为不可变的。
问题的另一部分是我应该使用哪种算法来填充数据结构,然后再“分析”问题。
我正在尝试分析程序集引用应该是有向无环图但不是的应用程序。还有一个子组件引用一个子子组件的不同版本的相关问题(想想埃舍尔......)
我想要做的是分析每个装配-子装配对并构建出问题所在的图片。
我需要一些关于什么是好的数据结构的指导。我不太确定我是否可以建立一个不可变的,但我不介意让它在内部是可变的,然后在最后转换为不可变的。
问题的另一部分是我应该使用哪种算法来填充数据结构,然后再“分析”问题。
您可以只使用NDepend,它会分析您的程序集并检测依赖周期。
如果你真的想自己做,我会使用QuickGraph来建模依赖图,它还包括图算法,比如拓扑排序。
我不介意让它在内部是可变的,然后在最后转换为不可变的。
您可能会发现在整个过程中使用不可变数据结构更容易。特别是,您可以轻松地将图表示为Map
从源节点到目标节点集。对于拓扑排序,您希望有效地访问目标节点的源节点,因此您可能希望用另一个Map
相反方向的图形来扩充您的图形。
我刚刚在 F# 中实现了这个,拓扑排序只有 12 行代码...... :-)
您要做的就是所谓的“拓扑排序”。维基百科有一个很好的概述: