用NDepend静态分析编写漂亮的、优化的、更好的.NET代码的教程

885 阅读5分钟

利用NDepend静态分析编写美丽、优化和更好的.NET代码

了解NDepend,".NET开发者、架构师和团队的瑞士军刀"。安装和设置NDepend,几乎可以立即改进代码。

多年来,我一直在讨论清洁架构、最佳实践、代码审查、单元测试等技术的好处,我认为在某种程度上,我们大多数人对其背后的原因是一致的。拥有一个干净的架构或代码库不仅使你的开发团队更快乐,而且对业务本身也有深远的影响。

在这篇文章中,我们将了解NDepend,它在其网站上被描述为以下内容。

".NET开发者、架构师和团队的'瑞士军刀'"

在这里,我们将迈出第一步,看看如何在Visual Studio项目中安装和设置NDepend,并几乎立即开始改进代码。

设置场景

你可以通过以下步骤在你的机器上轻松设置NDepend :

  • 下载压缩文件。
  • 运行NDepend Visual Studio扩展安装程序。
  • 使用NDepend。

用NDepend分析.NET代码库

让我们来看看我将用于测试的代码库。我有一个非常简单的.NET项目,结构如下。 正如你所看到的,这是一个典型的.NET核心Web API项目(demoApp.Web),它引用了两个标准的库项目,用于领域模型(demoApp.Core)和数据库库(demoApp.Data)。

你可以从这个资源库中下载源代码,或者使用你自己的代码库,其原理都是一样的。我使用这个非常简单的代码库是为了在这篇介绍性文章中保持对NDepend的关注,同时,我对这个应用的代码结构和组件的依赖性非常了解。

但你可能已经在想,如果是复杂的代码库呢如果开发者是项目的新手呢?这就是NDepend的优势所在。一旦你开始使用NDepend,它将使你更容易浏览代码库,可视化依赖关系图,当然,还可以帮助你以简单、快速的方式找到代码问题、代码气味和其他架构问题。

你可以访问官方网站了解更多信息。

现在,回到下一个安装步骤,一旦NDepend安装完毕,你会发现有如下的选项:

点击将新的NDepend项目附加到当前的VS解决方案。 通过这一次点击,VS解决方案将被配置为NDepend。在下一个屏幕上,你可以通过点击一个按钮开始分析,如下图所示。

分析结果

一旦NDepend运行了代码集,它将生成一份HTML报告,并为你提供一些下一步的选项。 你可以看到可能的行动和相应的描述。下图是NDepend仪表板的显示。 你可以看到这个视图给了我们一个很好的代码分析概览。现在我们可以深入钻研问题/关注点,看到更多细节,并采取必要的行动来改进代码库。

来自NDepend的信息和选项可能看起来让人不知所措,但没关系:花点时间来检查每个选项。在他们的网站上有关于NDepend的每个功能的简短视频。你可以逐渐学习这些选项,并随着你的进展将它们应用到你的代码库中。

语境为王

在架构领域,上下文是国王。虽然NDepend可以帮助你分析你的代码库,为不同的关注点提供方便的导航,并协助你改进你的代码库,但作为一个开发者,你要评估是否接受这些建议。 NDepend有许多内置的代码质量检查和规则,可以寻找常见的问题并建议最佳实践。你也可以根据你的项目要求引入新的规则,以配置NDepend来满足你的特定需求,并在遵循你的内部最佳实践和政策的同时发展你的应用程序架构。

下面是一个分析的例子,NDepend在仪表盘中发现了代码库中2个严重程度较高的问题。 我们可以深入到这些问题,看看哪些规则被违反了。
正如你所看到的,伴随着规则的描述,NDepend提供了修复问题的建议,只要简单地点击一下,它就会把我们带到相应的代码区域来修复它。

这里是不遵守规则的代码。
现在,开发人员可以审查代码,并根据NDepend的建议来修复这个问题。

依赖关系图

依赖关系图是NDepend的另一个有用的功能,它可以帮助你将解决方案可视化。它在复杂的代码库、架构讨论中变得非常有用,也有助于新入职的开发人员理解解决方案的结构和依赖关系。

下面是我们的示例源代码的依赖关系图。 你可以在官方网站上查看这个 资源,了解更多细节。官方网站上还有一个很好的视频,它将以一种简化的方式引导你了解这个伟大的功能。

其他NDepend功能

NDepend的一些值得注意的功能如下:

  • 轻松地管理大型项目
  • 持续的代码质量
  • 监控你的应用程序的健康状况
  • 减少你的开发者团队之间的摩擦
  • 轻松处理遗留的代码

NDepend还有很多其他有用的功能,我将在接下来的文章中进一步介绍。请在官方网站上查看更多的细节和例子。

总结

在这篇文章中,我们看到NDepend是一个非常有用的工具,它可以提高你项目的代码质量。安装很简单,你可以很快开始使用它。它有内置的规则来帮助你写出更好的代码,并且具有高度的可配置性,允许你根据你的项目要求来添加/删除规则。