방법: 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<Type> 형식이 있음을 의미합니다.
관계를 탐색하는 방법에 대한 자세한 내용은 방법: UML API와의 관계 탐색을 참조하십시오.
소유권 트리
모델에는 IElement 개체의 트리가 포함됩니다. 모든 요소에는 OwnedElements 및 Owner 속성이 있습니다.
대부분의 경우 Owner 및 OwnedElements 속성의 대상은 좀 더 구체적인 이름을 사용하는 다른 속성에서도 참조됩니다. 예를 들어 모든 UML 작업은 UML 클래스에서 소유합니다. 따라서 IOperation에는 Class라는 속성이 있으며, 모든 IOperation 개체에서 Class == Owner입니다.
트리의 최상위 요소, 즉 소유자가 없는 요소는 IModel입니다. IModel은 IModelStore 내에 Root로 포함됩니다.
모든 모델 요소는 소유자와 함께 만들어집니다. 자세한 내용은 방법: 요소 및 관계 만들기을 참조하십시오.
모양 및 다이어그램
UML 모델의 요소는 다이어그램에 표시될 수 있습니다. 다이어그램의 각 형식은 IElement의 각기 다른 하위 형식을 표시할 수 있습니다.
일부 경우에는 한 요소가 둘 이상의 다이어그램에 나타날 수 있습니다. 예를 들어 IUseCase 요소에는 몇 개의 IShape가 있으며 이러한 요소는 한 개 또는 여러 개의 다이어그램에 나타날 수 있습니다.
모양은 트리에 정렬되어 표시됩니다. 트리의 가장자리는 ParentShape 및 ChildShapes 속성으로 표현됩니다. 다이어그램은 부모 요소가 없는 유일한 모양입니다. 다이어그램 화면의 모양은 보다 작은 여러 부분으로 구성됩니다. 예를 들어 클래스 모양에는 특성 및 작업에 대한 구획이 있습니다.
모양에 대한 자세한 내용은 방법: 다이어그램에 모델 표시를 참조하십시오.
확장에서 모델 액세스
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; }
MEF(Managed Extensibility Framework)는 현재 다이어그램, 모델 저장소, 루트 개체 등을 가져올 수 있는 정의에 이러한 인터페이스를 바인딩합니다.
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 모델 버스를 사용하여 서로 다른 모델에 있는 요소 간의 링크를 만듭니다. 자세한 내용은 방법: UML 모델을 다른 모델 및 도구와 통합를 참조하십시오.
모델링 프로젝트와 다이어그램을 읽기 전용 모드로 로드하고 Visual Studio 사용자 인터페이스에 표시하지 않습니다. 자세한 내용은 방법: 프로그램 코드에서 UML 모델 읽기를 참조하십시오.
모델링 프로젝트와 다이어그램을 Visual Studio에서 연 다음 해당 내용에 액세스합니다. 자세한 내용은 방법: Visual Studio API를 사용하여 UML 모델 열기를 참조하십시오.