Welcome to TechNet Blogs Sign in | Join | Help

UML Model Explorer

在VSTS 2010 Architecture产品中,我们在VS中增加了一个新的工具窗来帮助您理解并操控您所创建的UML模型。UML Model Explorer是一个树状结构的WPF组件,用来展示UML模型中的层次结构。在这里,模型是指您创建Modeling Project中的内容。一般来说,UML Model Explorer中的根节点用来表示Modeling Project本身。

例如下面的图片,我创建了两个Modeling Project:”My First Modeling Project”和”My Second Modeling Project”。打开UML Model Explorer后你会发现两个与Solution Explorer中相对应的节点。

clip_image002

您可能会感到疑惑:为什么要在两个不同的窗口展示同样的信息?下面的介绍会解答这个问题,这里值得指出的是,UML Model Explorer是您创建的模型的逻辑视图,而Solution Explorer展示的是物理视图,例如您的模型是存储在哪个文件中。有了这样的认识,接下来的介绍会更加容易理解。

每次您创建一个Modeling Project,UML Model Explorer中都会显示一个新的节点。这个节点其实是一个UML Package,并使用与Modeling Project相同的名字。所有在这个Modeling Project中创建的模型元素都会显示在该根节点下。创建Modeling Project是唯一在UML Model Explorer中创建根节点的方法。

在VSTS 2010中,所有显示在根节点下的模型元素都存储在对应Modeling Project中的ModelDefinition文件夹中。事实上,每当有UML Package创建时,都会有对应的.uml文件产生。所有在该UML Package中的元素(不包括新建的UML Package),都存储在对应的.uml文件中。如果您在一个Package中创建了新的Package,新的.uml文件会被创建出来,用来存储这个Package中包含的元素。

现在,让我们看看几个例子,并看看UML Model Explorer的一些其他功能。

创建元素

我想在”My Second Modeling Project”中新建一个class。在UML Model Explorer中,我可以右键单击该根节点,并选择Add-Class。

clip_image004

选择后,新创建的class就会出现在”My Second Modeling Project”节点下,并处于可编辑状态,这样,您可以修改该节点的名字。若要修改已存在的节点名称,您可以通过双击该节点的名字区域,或者选中该节点,然后按下F2,使之处与可编辑状态。

clip_image005

下面这张图片展示了多个已创建的元素。每个节点的右边有灰色文字表示该节点的类型。

clip_image006

能够创建什么类型的节点取决于您右键点击的节点。例如,当我点击在class或者interface元素上,我就能够添加UML Attribute和UML Operation了。

clip_image008

当我们添加了Operation和Attribute后,UML Model Explorer看起来是这样的:

clip_image009

除了可以在UML Model Explorer中直接添加元素外,我们还有其他选择。当您拖拽新的元素至图表中后,您会发现这些元素也同样会在UML Model Explorer中显示出来。

例如,我将在”My First Modeling Project”中创建新的UML Class Diagram。通过在Solution Explorer中右键单击该工程节点,选择Add->New Item…,在弹出来的对话框中选择”UML Class Diagram”,并给它一个名字,然后点击OK。

clip_image011

现在,我就有一个空的UML Class Diagram,在Solution Explorer中会看到相应的文件:

clip_image012

现在,我在刚才新建的图表中创建两个class,并用UML Association将两者连起来:

clip_image013

现在在UML Model Explorer中,您会看到在”My First Modeling Project”节点下多出来两个class节点。Association关系也会在节点中表示出来:

clip_image014

那么,UML Model Explorer是如何知道应该将新建立的模型元素显示在”My First Modeling Project”下呢?

在默认情况下,所有图表的”Linked Package”属性都会设置为代表Modeling Project的UML Package。当该图表中有新的元素被创建时,该属性用来表示新创建的元素应该包含在哪个Package中。所以在这个例子中,这个属性被设置为”My First Modeling Project”:

clip_image015

现在,我们来演示一个稍微复杂的例子,来展示更多的功能。

首先,我将在”My First Modeling Project”节点下创建3个UML Package:

clip_image016

上面提到过的,每次创建新的Package都会导致新的.uml文件生成。察看一下Solution Explorer,您会发现在”My First Modeling Project”中的ModelDefinition文件夹中有三个新的.uml文件,每个对应一个新建的Package。

clip_image017

现在我将创建3个UML Class Diagram并关联到这3个Package上。右键单击”My First Modeling Project”,选择”Add->New item…”,然后选择”UML Class Diagram”。重复三次,就能创建出3个UML Class Diagram,如下所示:

clip_image018

在Solution Explorer中双击打开UMLClassDiagram1.classdiagram文件,在Properties窗口中设置图表的”Linked Package”属性,就能将该图表与名为”One”的UML Package关联起来:

clip_image019

我们可以使用同样的方法将UMLClassDiagram2与名为”Two”的Package、UMLClassDiagram3与名为”Three”的Package关联起来。

clip_image020

“Paste By Reference”和删除元素

UML Model Explorer提供了一个很重要的功能,使得让不同图表上显示相同元素成为了可能。我们需要做的只是将元素从UML Model Explorer中拖拽到图表上。

现在,我将UML Model Explorer中的Class1节点分别拖拽至3个新创建的UML Class Diagram中:

clip_image022

这样,Class1就同时显示在3个图表中。通过图表中Class1图形的ToolTip或者将图形变宽,您能够看到它的全名。

clip_image023

这是用来表示该元素虽然显示在该Package中(记得图表本身关联到一个Package),但其实并不属于它。Class1属于My First Modeling Project这个Package,然而UMLClassDiagram1代表名为”One”的Package。

现在,UML Model Explorer仍然只有一个Class1元素。如果我在UML Model Explorer中为它增加一个operation,新增加的operation会同时显示在3个图表中,那是因为3个图表中的Class1图形只是镜像,指向同一个元素。修改Class1上任何一个数据,图表上都会有相应的改变。

同样的,在任何一个图表中对Class1图形做操作,例如增加一个Attribute,会导致元素本身改变,然后会将修改更新到所有其他图表中。

从UML Model Explorer拖拽是创建元素镜像最直观的方法,但是我们也可以通过右键菜单的”Paste By Reference”做到这一点。

clip_image024

当您在图表上删除这些图形时(直接按Delete键或者通过右键菜单,选择”Remove From Diagram”),删除的只是镜像,而不是元素本身。所以,当UMLClassDiagram1上的Class1被删除时,所有其他的镜像以及在UML Model Explorer上的元素仍然会被保留。

但如果我在UML Model Explorer上删除Class1,或者在任意一个图表里选择Class1图形,然后通过右键菜单选择”Delete From Model”,删除的是元素本身,所有该元素的镜像也会一起被删除。

clip_image025

总结

希望您能够通过这篇文章了解UML Model Explorer的基本功能。最关键的一点是,UML Model Explorer是Modeling Project的逻辑视图。它表示了所有能够在不同图表上显示的元素。这些元素不仅仅可以在图表上操作,也可以通过UML Model Explorer操作。

注:本文部分翻译自Cameron Skinner的博文:The UML Model Explorer

Published Friday, August 28, 2009 3:34 PM by TeamArchChina
Filed under:

Comments

Anonymous comments are disabled
 
Page view tracker