【51CTO经典译文】Visual Studio 2010新的可视化技术DGML已经可以提供直观的图表,类似于两个类之间的依赖图,继承图和自定义图表,你都可以直观地展示你想要的任何关系。51CTO编辑向您推荐《Visual Studio 2010应用与开发详解》专题。
图 1 类依赖图
现在你可以分析这些图表,在下面的图中你可以看到分析器。
循环引用 — 中心 — 未引用的。
紫色的类是未引用的,可能是死代码,也可能是应用程序的入口,蓝色的节点是中心,这些是最重要的,经常被使用的类,在这里没有强连接类。
图 2 分析器
制作你自己的分析器
你也可以制作你自己的分析器,如代码覆盖或命名约定,或其它你可以想到的,在下面的示例中,我创建了一个分析器,它使用字符串“Clemens”标记了绿色节点。
图 3 使用字符串“Clemens”标记的绿色节点
Ok,这个分析器可能没多大意思,更有趣的是创建…在/PrivateAssemblies/Providers文件夹下,已经有多个创建好的分析器,上面提到的就是其中一个。
图 4 /PrivateAssemblies/Providers文件夹下的分析器
所有分析器都使用的是IProvider接口和ProviderAttribute,如下图所示,经过一些探索后,你会发现prgroesion.common程序集有一个ProviderDiscovery方法,它查找provider目录下的类。
图 5所有分析器都使用的是IProvider接口和ProviderAttribute
因此,使用下面的代码制作一个程序集是一个良好的开端:
- [Provider(Name = "ClemensAnalyzer")]
- public class TestAnalyzer : IProvider
在void Initialize(IServiceProvider serviceProvider);中,你必须初始化你的provider,注册行为和行为处理程序(action.ActionHandlers.Add(new ActionHandler(this.OnAnalyzeTests));)…它调用你的分析…
- foreach (Node node in this._graph.VisibleNodes)
- {
- if (node.Label.Contains("Clemens"))
- {
- node[HasClemens] = true;
- outputObjects.Add(node);
- this.ThrowIfCancelled();
- }
- }
- node[HasClemens] = true;
#T#
是你增加到你图表的一些额外的元数据:private static GraphProperty HasClemens = GraphProperty.Register("HasClemens", typeof(bool), new GraphMetadata("Clemens","This one contains Clemens",null,GraphMetadataFlags.Default), typeof(TestAnalyzer));
所有这一切及其结果都会反应到你的分析器中。
图 6 显示分析结果
现在让我们开始做一个有用的人:-)
原文出处:http://www.clemensreijnen.nl/post/2010/01/18/VS2010-Architecture-Explorer-Analyzers.aspx
原文名:VS2010 Architecture Explorer Analyzers
作者:ClemensReijnen