您的位置:首页 > 其它

Visual Studio 2010 建模学习(二) - 依赖图 (Dependency Graph)

2009-12-12 19:12 267 查看
最近两周一直比较忙,没有时间来继续更新自己的博客。今天(2009/12/10)是我参加微软2009 MVP北京活动的第二天,晚上我所要参加的单元都已经完成了,总算可以轻松下来好好写写博客了,呵呵!先说说这次的MVP活动吧,我还是第一次参加,活动的地点在顺义东方太阳城的东方嘉宾酒店,距离市区还是蛮远的,还好知春路的西格玛大厦前有班车,如果坐公共汽车则只有955,从头到为尾一共有30多站,那花的时间可是相当的长啊!这次的活动还挺有意思的,有机会接触微软各个产品领域的MVP。第一天晚上的星光Party是个亮点,现场气氛非常活跃!谁说俺们IT从业人员比较沉闷?其实是缺乏适当的氛围来激活和引导,我看大家都很有才很幽默,尤其是在歌唱和搞笑方面,反正我是笑得前仰后合。晚会的经典语录包括:“哥们儿就是个茶几,不在乎有多少杯具(悲剧)!”“我是被报名的!”的等等,以后应该搞一个专题来记录下这次MVP活动的见闻。





在《上一篇博客》中简单介绍了什么是DGML,也许有很多朋友可能会问:“微软为啥要引入DGML呢?总不会是为了引入而引入吧!”当然不是,在Visual Studio 2010加入了一个全新的建模功能,称为依赖图(Dependency Graph),依赖图是用来辅助用户更好的理解和分析已有的解决方案,它是由代码到模型一个典型例子。依赖图本就是采用DGML来表示。

特别注意:DGML是一种表示有向图的XML格式语言,不是Visual Studio所特有的,依赖图仅是DGML的一个应用,Visual Studio也只是为DGML提供了一个展示的工具而已。用户可以根据的自己的需求的,在DGML的基本语法基础上进行扩展,也可以开发的展示工具来可视化DGML图。

那么如何在Visual Studio中生成依赖图呢?启动Visual Studio,然后打开已有的Visual Studio工程(在这里以PetShop为例子,Petshop是微软提供的一个在线购物应用的例子,完整解决方案一共包含了20多个工程,代码可以在网上下载),然后选择 Architecture 菜单 –> Generate Dependency Graph ->下面有四项子菜单By Assembly、By Namespace、By Class和Custom...,这些子菜单定义了所要生成的依赖图的“粒度”,也就是依赖关系的主体,如:Assembly之间的依赖关系、Namespace之间或者是类之间的。这里我选择了Custom...,它提供了更为详细的选择,钩上左侧所有的Checkbox就会生成最全的依赖关系,如下图所示。右侧的图,是更具左侧不同选项生成的一个示意图。



接下来,选择“OK”就会Visual Studio就会开始生成依赖图了,由于分析和生成的过程需要一定的时间,会有如下的一个进度条显示整个的进度情况:



生成依赖图过程还是很快的,PetShop解决方案所生成的依赖图如下所示,它显示了从最高层次Assembly之间的依赖关系,按住CTRL键,然后滚动鼠标的中间滚轮键可以放大和缩小显示内容。



例如下图是我放大了以后显示的一个局部。每一个图形代表了一个Assembly,它们之间的箭头连线则代表了依赖关系,线的粗细表示了依赖关系的强弱。例如:在下图中我选中了PetShop.DBUtility.dll,它被显示为高亮状态,它和其它Assembly之间的依赖关系联系也被显示为了蓝色,更具箭头的方向我们看出:PetShop.OracleDAL.dll、PetShop.SQLServerDAL.dll、PetShop.OracleProfileDAL.dll和PetShop.SQLProfileDAL.dll等依赖与它,而它只依赖于:Externals和Generics。



如果还想进一步挖掘一下PetShop.DBUtility.dll中的内容对外有哪些依赖关系,可以点击图形右上角的“Chevron”图标(向下的双箭头),则可以展开PetShop.DBUtility.dll到Namespace一层,下图所示:



同理,往下继续展开可以看到PetShop.DBUtility名字空间下定义的类型、类型下定义方法等,如下图:





当工程比较大的时候,所生成的依赖图往往比较的复杂,看起来非常乱,有些杂乱无章不太好用。为此,微软在Visual Studio中提供了很多辅助的功能帮助你浏览复杂依赖图,提供了不同显示方式,如:从左到右、从右到左、从上到下(默认方式),从下到上的树形显示方式,还有二维矩阵方式等等,下图是先择了从左到右显示方式和Butterfly(Turn the graph into a butterfly tree by hiding links that do not live on a path through the selected nodes.)方式工具条按钮组合显示方式,展示了PetShop.DBUtility.dll的依赖关系,过滤掉其它的不相关的图形。





当你将鼠标放到每一个连接线上的时候,会有导航按钮帮助你在连线两端点之间方便的导航,同时提示信息也会显示连接的详细信息,如下图所示:





除了上述功能之外,你还可以在图上进行分组和设置颜色的等等,这些功能就不在此介绍,留给大家在实际使用的时候再去探索吧!



补充一下



参加MVP Open Day时候,有朋友问我 : "能不能在依赖图上同时展开图上的所有节点?"。我当时没有找到如何这样做,但实际上依赖图是提供了这样功能的,鼠标右键点击依赖图,在上下文菜单中选择Group -> Expand All选项,就可以同时展开所有的节点了;如果要闭合所有节点,只需要选择Group -> Collapse All。



参考资源

Chris Lovett的博客上的一段Video

VS 2010 C# IDE Tips and Tricks
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: