使用Architecture Explorer分析应用程序及使用层次图
使用Architecture Explorer分析应用程序
Architecture Explorer和依赖图可以帮助我们了解所有的项目,包括小项目和大项目。Architecture Explorer可用于研究现有代码,还可以用依赖图选择要研究的代码并对其进行可视化。
Architecture Explorer将结构表示为节点,关系表示为连接,下图为WatiN框架项目下的图示:

最左侧的第一个选项的功能是从当前在Architecture Explorer中选中的所有节点生成新的依赖图文件。如果仅要包含当前栏目中的节点,则在单击这个选项前必须按下并持续按住Ctrl键。
第二个选项的功能是将Architecture Explorer中选中的节点添加到当前在VS中可见的依赖图中。
第三个选项功能是将信息从Architecture Explorer中输出到一个.dgml文件中,该文件是用于定义依赖图的xml架构。
第四个选项是重置Architecture Explorer为初始化状态,从而达到清除窗口重新开始的目的。
点击筛选器,可以选择其中的一个或多个筛选器选项,从而以不同的方式对该栏目所包含的信息进行研究:

除了上述筛选方式之外,我们还可以点击上图中的Types展开筛选栏:

该栏提供了很多选项可以用于决定该栏目的初始显示内容。可以将连接类型分为Outbound和Inbound,这种分类方法描述了与当前选中节点连接的方向。Outbound是指从当前选中节点指向相关节点。Inbound是指从前面的相关节点指向当前选中节点。使用Analysis选项可以查看循环引用或hub(例如,类),既可以是没有被调用的,也可以是已使用的。利用Grouping选项可以根据容器、属性进行分组。
依赖图可用于浏览现有代码的关系和组织。这些图使我们能很容易地对新的或不熟悉的代码进行了解。图中的关系清楚地表明了不同区域的代码之间的依赖关系,以及一段代码的修改会对哪些代码带来潜在的影响。
依赖图只会显示成功编译生成的代码中的依赖关系。没有生成成功的代码将不会出现在依赖图中。

上图表明了命名空间之间的关系,也可以提取其他信息得出想要查看的依赖图,如下图所示:

将鼠标悬停在图中的某个节点上,还可以浏览该节点的详细信息。右击节点还可以跳转到该节点的方法定义中。
上述创建依赖图是用过Architecture Explorer, 同时,我们可以在VS菜单中选择Architecture--> Generate Dependency Graph--> For Solution创建依赖图:

通过展开方式可以看到整个项目的架构,展开后显示的样式与使用Code Map效果是一样的。

因此,使用Architecture Explorer与依赖图结合的方式,和使用Code Map方式均可以帮助我们快速理解整个项目代码。
使用层次图
层次图不仅可以用于从较高层次描述一个应用程序的结构,而且还可以验证所开发的代码是否满足上层设计。层次图的一个非常优秀的功能在于可以验证应用程序设计的架构与基本代码是否一致,从而保证代码和架构在开发过程中始终保持匹配。
层次图显示了架构设计的主要组件,组件之间的依赖关系也体现在了层次图中。一个图由一个或多个节点组成,称为层。一个层表示一种逻辑分组——例如,一个名称空间或类文件。
虽然层次图位于建模项目内,但它可以连接到当前VS解决方案中的任何项。
层次图中的每一层都显示为一个矩形,不同层可以相互嵌套,称之为分组。层次图中不同的层用于定义项的逻辑分组,包括方法、类和名称空间。
作为一般原则,应该总是将具有相同依赖关系的项放在同一层上。而可以独立更新的项(或在独立的应用程序中所使用的项)则应该放在不同的层。
Layer Explorer可以用于浏览与特定的层相连接的项,并且可以在层之间移动这些项。
在层次图中定义了层之后,下一步就是要标识不同层之间的依赖关系。无论一个层中的项是引用还是使用另一个层中的项,这两个层之间就存在依赖关系。

层次图可以对架构进行验证。利用层次图的验证功能,可以验证各层之间的所有依赖关系是否正确。这个功能可以强制实施不同层之间的规则和依赖关系。如果验证成功返回如下图所示:

可以将Solution Explorer所包含的任何文件或项目拖放到层次图上,这样就会创建一个与文件名或项目名相同的新层,并包含一个到该文件或项目的连接。
用Architecture Explorer不仅可以深入到感兴趣的信息(如名称空间),还可以将名称空间拖放到层次图中,这些名称空间将表示为层次图上的一个层,与该层连接的层也将出现在层次图中。
还可以直接将依赖图信息拖到层次图中,这样也可以创建层。
使用Architecture Explorer分析应用程序及使用层次图的更多相关文章
- 如何利用 JConsole观察分析Java程序的运行,进行排错调优
原文链接:http://jiajun.iteye.com/blog/810150 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...
- 利用jdk自带的运行监控工具JConsole观察分析Java程序的运行
利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 原文链接 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...
- 在Eclipse中使用MAT分析Android程序内存使用状况(转)
对于Android这种手持设备来说,通常不会带有太大的内存,而且一般用户都是长时间不重启手机,所以编写程序的时候必须要非常小心的使用内存,尽量避免有内存泄露的问题出现.通常分析程序中潜在内存泄露的问题 ...
- 分析Android程序之破解第一个程序
破解Android程序通常的方法是将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkToo ...
- 关于电脑开机不出现桌面即不启动explorer.exe桌面程序--------正解
针对这个问题,一开始的思路是,把自己写的界面小程序(Win.exe)放在Windows启动文件夹中, 效果到是界面程序自启动了,但是还是先出现的桌面,然后才的启动的界面程序(Win.exe),并不是我 ...
- Net Memory Profiler 分析.Net程序内存泄露
Net Memory Profiler 分析.Net程序内存泄露 Haozes's Tech Space 人類的全部才能無非是時間和耐心的混合物 使用.Net Memory Profiler 分析.N ...
- 使用CLR Profiler分析.NET程序
使用CLR Profiler分析.NET程序 就像剥去.NET语法糖衣的工具(Reflector等)很多一样,我们可以用来分析.NET程序性能的工具有很多,如前面一片博文DebugLZQ给大家介绍的v ...
- 老李案例分享:MAT分析应用程序服务出现内存溢出过程
老李案例分享:MAT分析应用程序服务出现内存溢出过程 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loa ...
- 在Linux下,如何分析一个程序达到性能瓶颈的原因
0.在Linux下,如何分析一个程序达到性能瓶颈的原因,请分别从CPU.内存.IO.网络的角度判断是谁导致的瓶颈?注意现在的机器CPU是多核 1.用sar -n DEV 1 10 2.用iotop命令 ...
随机推荐
- SSD性能对比
SSD性能测试顺序写 16k iops 85061.08顺序写 8k iops 146250.93顺序写 4k iops 239816.69顺序写 2k iops 294540.87顺序写 1k io ...
- hdu 2203 亲和串
把T串扩展成两倍 然后KMP 注意T的长度要大于P的长度 #include <iostream> #include <cstdio> #include <cstri ...
- Android Launcher分析和修改13——实现Launcher编辑模式(1) 壁纸更换
已经很久没更新Launcher系列文章,今天不分析源码,讲讲如何在Launcher里面添加桌面设置的功能.目前很多第三方Launcher或者定制Rom都有简单易用的桌面设置功能.例如小米MIUI的La ...
- 仿网易漂亮的TAB选项卡(标签)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- mediawiki的安装与配置
apache的配置: 1. 开启php module 查看mods-enabled/php5.load 是否存在,不存在的话, 就从mods-avaliable中复制一个到mods-enabled中. ...
- 命令行的全文搜索工具--ack
想必大家在命令行环境下工作时候,一定有想要查找当前目录下的源代码文件中的某些字符的需求,这时候如果使用传统方案,你可能需要输入一长串的命令,比如这样: 1. grep -R 'string' dir/ ...
- Windows 2008 利用Filezilla server搭建FTP
Windows 2008 利用Filezilla server搭建FTP, 安装后总是提示Error Connection To Server Lost , 后来,无意中先安装了IIS,再安装file ...
- 前端开发者进阶之ECMAScript新特性【一】--Object.create
Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数:prototype 必需. 要用作原型的对象. 可以为 nul ...
- webpack 打包时到底如何组织js
问题一:引入前端库,方法也是不一样的 比如 lodash.js ,作为一个 chunk 用 html-webpack-plugin 打包到页面里,会生成一个全局变量 window._ ,在其它 js ...
- 面向.Net程序员的后端性能优化实战
最近2个月没做什么新项目 完全是对于旧的系统进行性能优化 避免超时 死锁 数据处理能力不够等常见的性能问题 这里不从架构方面出发 毕竟动大手脚成本比较高 那么我们以实例为前提 从细节开始 优化角度 一 ...