使用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. ASP lable标签显示过长,自动换行。

    <asp:Label ID="lab_BeforPostR" runat="server" CssClass="labSty" Wid ...

  2. 39. Volume Rendering Techniques

    Milan Ikits University of Utah Joe Kniss University of Utah Aaron Lefohn University of California, D ...

  3. C# WinForm 技巧十: 开发工具

    一.摘要   为了开发效率就应该为这个框架开发一个配套工具.来生成固定格式的代码.工具界面如下:   二.数据库整理篇   添加表主键 修改表说明 修改表字段说明 生成数据库文档 导出数据库里相同的字 ...

  4. 【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。

    困扰我大半年的错误,今天偶然间被解决了,特此分享给被同样问题纠结的朋友们! 之前的求助帖,无人应答: http://www.cnblogs.com/freeton/archive/2012/08/28 ...

  5. Three levels at which any machine carrying out an Information-Processing task must be understood

    1. Computational theory What is the goal of computation, why is it appropriate, and what is the logi ...

  6. 图片上传代码(C#)

    //上传 protected void Button1_Click(object sender, EventArgs e)        {            if (FileUpload1.Ha ...

  7. Promising Linking

    Future/Promise 执行逻辑 scala Future 有几个要点,第一个是 tryAwait 需要借助 CowndownLatch 实现,第二个是可以在 Promise 挂载回调函数 首先 ...

  8. 基于HTML5的Web跨设备超声波通信方案

    前言:Chirp在iPhone上掀起了有声传输文件的序幕,我们再也不需要彩信.蓝牙配对.IM来传送数据.它通过“叽叽喳喳”的小鸟叫声来分享数据,简单有趣,而且可以快速的实现一对多的分享. 此外支付宝曾 ...

  9. 爬网页?--Chrome帮你计算XPath

    最近用HtmlUnit/HtmlCleaner爬网页,这两个工具都使用XPath来定位html元素.发现chrome竟然有算出XPath的功能! 打开一个网页,F12,在弹出的小窗口中选中一个标签,右 ...

  10. BZOJ 1093 [ZJOI2007] 最大半连通子图(强联通缩点+DP)

    题目大意 题目是图片形式的,就简要说下题意算了 一个有向图 G=(V, E) 称为半连通的(Semi-Connected),如果满足图中任意两点 u v,存在一条从 u 到 v 的路径或者从 v 到 ...