HOW TO:巡覽 UML 模型
本主題介紹 UML 模型的主要型別。
模型項目、模型和模型存放區
Microsoft.VisualStudio.Uml.Interfaces.dll 組件中定義的型別會對應於 UML 規格 2.1.2 版中定義的型別。
UML 規格中的型別會實現為 Visual Studio Ultimate 中的介面。 每一個型別的名稱前面都會加上字母 'I'。 例如:IElement、IClass、IInteraction、IOperation。
除了 IElement 之外,所有型別的屬性都繼承自一個或多個超級型別。
如需模型型別的摘要,請參閱模型項目型別。
如需 API 的詳細資料,請參閱UML 模型擴充性的 API 參考。
關聯性
UML 規格中定義的屬性和關聯性會實作為 .NET 屬性。
大部分關聯性都可以雙向巡覽。 一個關聯性對應於一對屬性,而每一端各有一個型別屬性。 例如,IElement.Owner 和 IElement.OwnedElements 屬性代表關聯性的兩端。 因此,此運算式一律會評估為 true:
IElement c; ... c.OwnedElements.All(x => x.Owner == c)
有許多關聯性 (如 IAssociation) 也可以由具有專屬屬性的物件來代表。
如果您刪除模型中的項目,則會自動刪除該項目所參與的任何關聯性,而另一端的屬性會隨之更新。
如果 UML 規格指派多重性 0..1 給屬性,則其值可能為 null。 多重性的最大值大於 1 時,表示 .NET 屬性的型別為:IEnumerable<型別>。
如需周遊關聯性的詳細資訊,請參閱 HOW TO:使用 UML API 瀏覽關聯性。
擁有權樹狀結構
包含 IElement 物件樹狀結構的模型。 每一個項目都具有 OwnedElements 和 Owner 屬性。
在大多數情況下,Owner 和 OwnedElements 屬性的目標也會在名稱更明確的其他屬性中參考。 例如,每一項 UML 作業是由 UML 類別所擁有。 因此,IOperation 具有名稱為 Class 的屬性,而且在每一個 IOperation 物件中,Class == Owner。
樹狀結構的最上層項目 (該項目沒有 Owner) 為 IModel。 IModel 包含在 IModelStore 中,而且是其中的 Root。
每一個模型項目都是使用 Owner 建立的。 如需詳細資訊,請參閱 HOW TO:建立項目與關聯性。
圖案和圖表
UML 模型中的項目可以顯示在圖表上。 不同類型的圖表可以顯示不同子類型的 IElement。
在某些情況下,項目可能會出現在多個圖表上。 例如,IUseCase 項目可以有數個 IShape,而這些圖案可能會出現在一個圖表或不同圖表上。
圖案可以樹狀結構排列。 樹狀結構的邊緣是由 ParentShape 和 ChildShapes 屬性來表示。 圖表是唯一沒有父代的圖案。 圖表表面上的圖案是由許多小部分所組成。 例如,類別圖案具有屬性和作業的區間。
如需圖案的詳細資訊,請參閱 HOW TO:在圖表上顯示模型。
存取擴充功能中的模型
在已定義為 MEF 元件的 Visual Studio 擴充功能中,您可以宣告用於從擴充功能執行所在環境匯入資訊的屬性。
屬性型別 |
這可供存取 |
詳細資訊 |
---|---|---|
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation .IDiagramContext (在 Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll 中) |
目前的焦點圖表。 |
|
Microsoft.VisualStudio.Modeling.ExtensionEnablement .ILinkedUndoContext (在 Microsoft.VisualStudio.Modeling.Sdk.10.0.dll 中) |
可讓您將變更分組為不同的交易。 |
|
Microsoft.VisualStudio.Shell .SVsServiceProvider (在 Microsoft.VisualStudio.Shell.Immutable.10.0.dll 中) |
主機 Visual Studio。 您可以從該處存取檔案、專案和其他層面。 |
若要取得內容
在擴充功能類別內,宣告下列一個或兩個介面:
[Import] public IDiagramContext DiagramContext { get; set; }
Managed Extensibility Framework (MEF) 會將這些項目繫結至您可從中取得目前圖表、模型存放區、根物件等的定義:
IDiagram diagram = this.DiagramContext.CurrentDiagram;
IClassDiagram classDiagram = diagram as IClassDiagram;
// or diagrams of other types
IModelStore modelStore = diagram.ModelStore;
IModel model = modelStore.Root;
foreach (IDiagram diagram in modelStore.Diagrams) {...}
foreach (IElement element in modelStore.AllInstances<IUseCase>) {...}
若要取得目前選項
// All selected shapes and their elements
foreach (IShape shape in diagram.SelectedShapes)
{
IDiagram selectedDiagram = shape as IDiagram;
if (selectedDiagram != null)
{ // no shape selected - user right-clicked the diagram
... Context.CurrentDiagram ...
}
else
{
IElement selectedElement = shape.Element;
...}
// All selected shapes that display a specfic type of element
foreach (IShape<IInterface> in
diagram.GetSelectedShapes<IInterface>())
{...}
存取其他模型或圖表
您可以:
使用 Visual Studio 模型匯流排建立不同模型中各項目間的連結。 如需詳細資訊,請參閱HOW TO:整合 UML 模型與其他模型和工具。
以唯讀模式載入模型專案和圖表,而不讓它顯示在 Visual Studio 使用者介面中。 如需詳細資訊,請參閱HOW TO:讀取程式碼中的 UML 模型。
在 Visual Studio 中開啟模型專案及其圖表,然後存取內容。 如需詳細資訊,請參閱HOW TO:使用 Visual Studio API 開啟 UML 模型。