使用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分析应用程序及使用层次图的更多相关文章

  1. 如何利用 JConsole观察分析Java程序的运行,进行排错调优

    原文链接:http://jiajun.iteye.com/blog/810150 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...

  2. 利用jdk自带的运行监控工具JConsole观察分析Java程序的运行

    利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 原文链接 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...

  3. 在Eclipse中使用MAT分析Android程序内存使用状况(转)

    对于Android这种手持设备来说,通常不会带有太大的内存,而且一般用户都是长时间不重启手机,所以编写程序的时候必须要非常小心的使用内存,尽量避免有内存泄露的问题出现.通常分析程序中潜在内存泄露的问题 ...

  4. 分析Android程序之破解第一个程序

    破解Android程序通常的方法是将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkToo ...

  5. 关于电脑开机不出现桌面即不启动explorer.exe桌面程序--------正解

    针对这个问题,一开始的思路是,把自己写的界面小程序(Win.exe)放在Windows启动文件夹中, 效果到是界面程序自启动了,但是还是先出现的桌面,然后才的启动的界面程序(Win.exe),并不是我 ...

  6. Net Memory Profiler 分析.Net程序内存泄露

    Net Memory Profiler 分析.Net程序内存泄露 Haozes's Tech Space 人類的全部才能無非是時間和耐心的混合物 使用.Net Memory Profiler 分析.N ...

  7. 使用CLR Profiler分析.NET程序

    使用CLR Profiler分析.NET程序 就像剥去.NET语法糖衣的工具(Reflector等)很多一样,我们可以用来分析.NET程序性能的工具有很多,如前面一片博文DebugLZQ给大家介绍的v ...

  8. 老李案例分享:MAT分析应用程序服务出现内存溢出过程

    老李案例分享:MAT分析应用程序服务出现内存溢出过程   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loa ...

  9. 在Linux下,如何分析一个程序达到性能瓶颈的原因

    0.在Linux下,如何分析一个程序达到性能瓶颈的原因,请分别从CPU.内存.IO.网络的角度判断是谁导致的瓶颈?注意现在的机器CPU是多核 1.用sar -n DEV 1 10 2.用iotop命令 ...

随机推荐

  1. Android UI系列-----时间、日期、Toasts和进度条Dialog

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  2. puppy-language

    puppy language是一种解释型的结构化脚本语言. 项目地址: https://github.com/zlvb/PuppyLanguage 因为一直很忙,有段时间没去更新了,不过功能已经比较完 ...

  3. assertThat用法

    一般匹配符1.assertThat( testedNumber, allOf( greaterThan(8), lessThan(16) ) ); 注释: allOf匹配符表明如果接下来的所有条件必须 ...

  4. Android--使用Canvas绘图

    前言 除了使用已有的图片之外,Android应用常常需要在运行时根据场景动态生成2D图片,比如手机游戏,这就需要借助于Android2D绘图的支持.本篇博客主要讲解一下Android下使用Canvas ...

  5. Windows无法安装到GPT分区形式磁盘的解决办法

    现在很多新买的硬盘都是GTP格式,这种格式需要使用UEFI BIOS模式安装系统,我们以前传统的windows系统安装都是“MBR+legacy BIOS”模式安装 Windows无法安装到GPT分区 ...

  6. web端视频直播网站的弊端和优势

    在YY上市前后,国内涌出一批类YY视频直播或9158的秀场类网站. 比如六间房,酷六等等 这种web端视频服务基本依靠web本身的特性,用flash直播,靠CDN提供服务. 但是这样的架构有2个问题 ...

  7. Carthage 安装和使用

    和Cocoapods相比各有利弊吧,具体对比参见: Carthage 初探:四大优势与四大劣势 第一步:如果没有安装Homebrew先安装 打开命令终端,直接输入以下命令回车 /usr/bin/rub ...

  8. nohup启动java命令导致dubbo无法注册

    没有任何异常,日志和正常注册日志一模一样,但服务就是没注册成功. 解决办法,screen代替nohup命令. screen screen -ls screen -r pid (ctrl + a)+d

  9. MFC一个类访问另一个类成员对象的成员变量值

    MFC中一个类要访问另外一个类的的对象的成员变量值,这就需要获得原来那个类对象的指针,其实有好几种方法都可以实现. 比如维护一个单例模式.设置静态变量等等.我们这里举个列子,实现多个类之间的相互访问. ...

  10. Code片段 : .properties属性文件操作工具类 & JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...