如何:创建元素和关系
在 Visual Studio 旗舰版的扩展的程序代码中,可以创建和删除元素和关系。
创建模型元素
命名空间导入
必须包括以下 using 语句。
创建方法作为此命名空间中的扩展方法来定义:
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
获取要创建的元素的所有者
模型构成单个树,以使除模型根以外的每一项都有一个所有者。模型根的类型为 IModel,它属于 IPackage 类型。
如果要创建的元素将显示在特定关系图中(例如,用户的当前关系图),则通常应在链接到该关系图的包中创建它。例如:
IPackage linkedPackage = Context.CurrentDiagram.Element as IPackage;
下表汇总了常用模型元素的所有权:
要创建的元素 |
所有者 |
---|---|
IActor, IUseCase, IComponent, IClass, IInterface, IEnumeration IActivity, IInteraction |
IPackage, IModel |
IAttribute, IOperation |
IClass, IInterface |
IPart, IPort |
IComponent |
IAction, IObjectNode |
IActivity |
ILifeline, IMessage, ICombinedFragment |
IInteraction |
对所有者调用 Create 方法
方法名称的形式为:CreateOwnedType()。例如:
IUseCase usecase1 = linkedPackage.CreateUseCase();
某些类型具有更为复杂的创建方法,尤其是在序列图中。请参见如何:使用 UML API 编辑序列图。
对于某些类型的元素,可以使用 SetOwner(newOwner) 在元素的生存期中更改元素的所有者。
设置名称和其他属性
usecase1.Name = "user logs in";
示例
using Microsoft.VisualStudio.Uml.Classes;
using Microsoft.VisualStudio.Uml.Extensions;
...
void InstantiateObserverPattern (IPackage package, string namePrefix)
{ IInterface observer = package.CreateInterface();
observer.Name = namePrefix + "Observer";
IOperation operation = observer.CreateOperation();
operation.Name = "Update";
IClass subject = package.CreateClass();
subject.Name = namePrefix + "Subject"; ...
创建关联
创建关联
获取关联的所有者,它通常是包含关系的源端的包或模型。
对所有者调用所需的 Create 方法。
设置关系的属性,例如关系的名称。
例如:
IAssociation association = subject.Package.CreateAssociation(subject, observer); association .Name = "Observes";
设置关系每一端的属性。始终有两个 MemberEnds。例如:
association .MemberEnds[0].Name = "subject"; // role name association .MemberEnds[1].Name = "observers"; // role name association .MemberEnds[1].SetBounds("0..*"); // multiplicity defaults to "1" association.MemberEnds[0].Aggregation = AggregationKind.Composite;
创建泛化
IGeneralization generalization =
subclass.CreateGeneralization(superClass);
从模型中删除元素、关系或泛化
anElement.Delete();
从模型中删除某个元素时:
也将删除与该元素链接的每个关系。
也将删除在关系图上表示该元素的每个形状。