65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 代码依赖关系图可视化

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (3投票s)

2014 年 2 月 12 日

CPOL

2分钟阅读

viewsIcon

24667

.NET 代码依赖关系图可视化

依赖关系图是一种很好的可视化方式,可以用来检查代码并理解代码库,而无需逐行查看。

有一些强大的工具,例如 Visual Studio Ultimate 依赖关系图ndepend,尤其适用于 .NET 代码。

我们的工具以一种不太复杂和不太科学的方式查看依赖关系。因此,它更简单、更直观,能让你更好地了解哪些“属于一起”,以及组件之间的自然边界在哪里。

想法

我们从 .NET 程序集中生成一个依赖关系图,将其放入“力场”中,并观察代表类型的节点如何摇摆,直到它们找到“自然”的位置。

CodeDependencyForceGraph

…而且它是交互式的。你可以“戳”你的代码依赖关系

  • 悬停在节点上以查看详细信息
  • 单击命名空间节点以使其爆炸
  • 尝试拖动节点,看看有多少内容会被“带走”
  • 使用上下文菜单展开/折叠树,展开/折叠子树
  • 选中/取消选中树节点,以在图上突出显示它们
  • 使用鼠标滚轮进行缩放,拖动表面进行平移

用法

有两个可执行文件。第一个 codevis.exe 从程序集中生成依赖关系图,并将其保存到 json 文件中。另一个 Gma.CodeVisuals.WebApi.exe 用于可视化,它在 8080 端口上托管一个 HTML5 站点并启动浏览器。

你可以从一个或多个程序集中生成依赖关系。请注意,如果你从多个程序集中生成一个图,它还将包括程序集间的依赖关系,即位于不同程序集中的类型之间的依赖关系。

示例

    > codevis.exe C:\Framework\System.Core.dll
    > codevis.exe C:\Framework\System.Data*
    > codevis.exe MyAssembly System.Core System.Linq -p:C:\framework\;c:\myfolder

程序集名称必须用空格分隔。可以省略 ‘.dll’ 或 ‘.exe’ 扩展名。名称中可以使用通配符。你也可以选择使用每个程序集的绝对路径,或者使用 -p 选项指定简短的程序集名称以及搜索目录。

实现

为了生成依赖关系图,我们使用 .NET 反射和一个由 Roy Osherove 提供的库,该库最初是从 Microsoft 的示例代码中改编而来,用于 DynamicMethod 可视化工具。

可视化使用一个非常强大且美观的库完成,名为 D3 Data-Driven Documents。同样基于 d3js 的 CodeFlower 可视化工具,它通过 LOC(代码行数)可视化代码库,为我们提供了一个良好的起点。

未来

该项目托管在 https://github.com/floriangreinacher/codegravity。它是开源的。除了改进依赖关系图的可用性之外,我们可能会添加一些其他的直观代码指标可视化。目前,我正在考虑将我的 Code Word Cloud Generator 迁移到 d3js 和 HTML5。

再一点

我个人非常喜欢 Web API 和 HTML5 站点托管在一个 EXE 中的想法。你只需要可重用的类 WebServerOnFolder(位于 $\Gma.CodeVisuals.WebApi\Server\WebServerOnFolder.cs)和 ASP.NET Web API Self Host nuget 包。

© . All rights reserved.