Visual Studio 2010 建模学习(三) - 构架浏览器 (Architecture Explorer)

来源:互联网 发布:淘宝口红代购哪家好 编辑:程序博客网 时间:2024/05/29 16:05

      在Visual Studio 2010中,还提供了另外一个工具来辅助广大开发人员来理解已有的代码或者编译好的.Net Assembly,它就是构架浏览器(Architecture Explorer)。构架浏览器能够以Class View、Solution View和 File System的方式来浏览已有的系统。Class View和Solution View支持对Visual C#和Visual Basic.Net工程的浏览,而File System -> Select Files...方式则可以用来浏览任何基于.Net的编译好的Assembly文件的内容,有点像是Reflection工具的功能。

 

特别注意:VS 2010中的构架浏览器现在仅支持.NET的managed代码语言,而对于unmanaged代码(如:native C/C++)还不支持,C/C++还是有着相当大的一块儿开发者群体的,相信微软应该是在后续的VS版本或者扩展工具中对其进行支持。

 

      这里还是以PetShop为例,以Class View的方式来浏览一下的这个工程。首先用Visual Studio打开PetShop解决方案,然后选择Architecture菜单 –> Windows –>Architecture Explorer,来打开构架浏览器窗口。在窗口的最左一列的窗口选择Class View,在其右边紧邻的窗口中显示出当前解决方案的所有名空间,选择一个或者多个名字空间,其右侧的窗口内就会显示所选择名字空间下的所有类型,选择一个或多个类型,则其相应成员(方法、属性和变量)又会显示右侧的窗口中,继续选择成员,则其右侧的窗口会显示出该成员的所有调用,如下图所示:

image

      双击名字空间、类型或者成员窗口中的任意的节点,工具会帮助在代码窗口中显示对应的代码。此外,通过构架浏览器还可以直接生成上文我们所讲到过的依赖图。在构架浏览器窗口选择任何你感兴趣的内容,然后选择最左侧的第一个按钮,就可以创建一个新的依赖图,如我选择PetShop.BLL名字空间和它下面的所有类型以及部分成员,生成的依赖图如下:

image

     当然,你也可以通过鼠标拖拽的方式,直接把构架浏览器中的内容通过拖拽的方式添加到已有的依赖图上。除了能够浏览打开的工程之外,构架浏览器还可以直接浏览编译好的Assembly文件中的名字空间、类型等,只是不能双击导向到相应的代码,其它都和直接浏览工程差不多,所以这就不再赘述了,留给大家自己去探索吧,呵呵!

      此外,在Architecture Explorer中引入了DGQL(Dependency Graph Query Language,依赖图查询语言),它是被用来记录在Architecture Explorer中进行查询的描述语言,同时也可以通过Archiecture Explorer生成DGQL,我很喜欢Render在其博客中的一段描述:"The explorer is just a DGQL generator (Directed Graph Query Language) and the generated graphs are the results"。DGQL的语法比较古怪,在Beta 2中没有任何关于其语法介绍的文档,在Save DGQL Queries -> In Folders,预置了三个.dgql文件:Contructors.dgql、Public Classes.dgql和Virtual Members.dgql,它们分别查询当前工程中所有的构造函数、public类和虚成员,Contructors.dgql文件内容如下:

 

+ Id.Equals("Microsoft.Solution.ClassView") /"Microsoft.Solution.ClassView"/*
/"Node:Both:CodeSchema_Type"/* /"Node:Both:CodeSchema_Member"/
+ CodeSchemaProperty_IsConstructor.Equals("True")

      虽然,现在没有任何资料,但也可以根据以有的.dgql文件来推敲一下其语法。同时你可以在Architecture Explorer中选择所要的内容,然后,将选择的内容保存为.dgql文件进行分析。例如:下面的DGQL是我在Architecture Explorer(VS打开PetShop解决方案)中选择Solution View | DBUtility | OrcaleHelper.cs后生成的,它显示的是所有OrcaleHelper.cs下的所有车成员:

 

+ Id.Equals("Microsoft.Solution.SolutionView") /"Microsoft.Solution.SolutionView"/
+ Id.Equals("(Assembly="file:///D:/Text/Projects/.NET Pet Shop 4.0/.NET Pet Shop 4.0/DBUtility/DBUtility.csproj")") /"Node:Both:CodeSchema_SourceFile"/
+ Id.Equals("(Assembly="file:///D:/Text/Projects/.NET Pet Shop 4.0/.NET Pet Shop 4.0/DBUtility/OracleHelper.cs")") /"Node:Both:CodeSchema_Type"/*
/"Node:Both:CodeSchema_Member"/
 

 

如果现在我只想显示OrcaleHelper.cs中的所有public成员,则是需要在其末尾添加一行,如下所示:

 

+ Id.Equals("Microsoft.Solution.SolutionView") /"Microsoft.Solution.SolutionView"/
+ Id.Equals("(Assembly="file:///D:/Text/Projects/.NET Pet Shop 4.0/.NET Pet Shop 4.0/DBUtility/DBUtility.csproj")") /"Node:Both:CodeSchema_SourceFile"/
+ Id.Equals("(Assembly="file:///D:/Text/Projects/.NET Pet Shop 4.0/.NET Pet Shop 4.0/DBUtility/OracleHelper.cs")") /"Node:Both:CodeSchema_Type"/*
/"Node:Both:CodeSchema_Member"/
  +CodeSchemaProperty_IsPublic.Equals("True")      

      另外,Visual Studio 2010还提供了一个命令行工具GraphCmd.exe(在VS安装目录/Common7/IDE下),可以利用这个工具从.dgql文件直接生成.dgml文件。Chris Lovett有一个Video很好的描述了这个DGML和这个命令- 《Architecture Explorer》。


      VS 2010 Beta 2的时候,MSDN文档中关于DGQL的介绍基本上一片空白,在网上无论Bing还是Google都搜不到啥相关内容。如今RC已经出来了(参见《Visual Studio 2010 RC正式发布 - 模型和CUIT工程需要升级》),MSDN文档内容的改进还是十分明显的,《How to: Generate Graph Documents from Code》有了对DGQL语法介绍,建议大家有机会能看一看。

 

参考资源

  1. How to: Find Code Using Architecture Explorer