Navegar y actualizar modelos de capas en el código del programaNavigate and update layer models in program code

En este artículo se describe los elementos y relaciones en modelos de capas, que puede navegar y actualizar mediante código del programa.This article describes the elements and relationships in layer models, which you can navigate and update by using program code. Para obtener más información acerca de los diagramas de dependencia desde la perspectiva del usuario, consulte diagramas de dependencia: referencia y diagramas de dependencia: instrucciones.For more information about dependency diagrams from the user's point of view, see Dependency Diagrams: Reference and Dependency Diagrams: Guidelines.

El Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer modelo se describe en este tema es una fachada en más general Microsoft.VisualStudio.GraphModel modelo.The Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer model described in this topic is a facade on a more general Microsoft.VisualStudio.GraphModel model. Si está escribiendo un extensión de gestos o comandos de menú, utilice el Layer modelo.If you are writing a menu command or gesture extension, use the Layer model. Si está escribiendo un extensión de validación de capas, resulta más fácil de usar el GraphModel.If you are writing a layer validation extension, it is easier to use the GraphModel.

TransaccionesTransactions

Cuando se actualiza un modelo, considere la posibilidad de insertar los cambios en un ILinkedUndoTransaction, que agrupa los cambios en una transacción.When you update a model, consider enclosing the changes in a ILinkedUndoTransaction, which groups your changes into one transaction. Si se produce un error en cualquiera de los cambios, se revierte la transacción entera.If any of the changes fails, the whole transaction is rolled back. Si el usuario deshace un cambio, todos los cambios se deshacen juntos.If the user undoes a change, all the changes are undone together.

using (ILinkedUndoTransaction t =
        LinkedUndoContext.BeginTransaction("a name"))
{
    // Make changes here ....
    t.Commit(); // Don't forget this!
}

InclusionesContainment

Tanto ILayer como ILayerModel pueden contener ILayers.

Las capas (ILayer) y el modelo de capas (ILayerModel) pueden incluir comentarios y capas.Layers (ILayer) and the layer model (ILayerModel) can contain Comments and Layers.

Una capa (ILayer) puede incluirse en un modelo de capas (ILayerModel) o anidarse en otra ILayer.A layer (ILayer) can be contained in a layer model (ILayerModel) or it can be nested within another ILayer.

Para crear un comentario o una capa, use los métodos de creación pertinentes del contenedor adecuado.To create a comment or a layer, use the creation methods on the appropriate container.

Un vínculo de dependencia se representa mediante un objeto.A dependency link is represented by an object. La navegación puede producirse en cualquier dirección:It can be navigated in either direction:

Un objeto ILayerDependencyLink conecta dos ILayers.

Llame a source.CreateDependencyLink(target) para crear un vínculo de dependencia.To create a dependency link, call source.CreateDependencyLink(target).

ComentariosComments

Los comentarios pueden incluirse en capas o en el modelo de capas, así como vincularse a cualquier elemento de capa:Comments can be contained inside layers or the layer model, and can also be linked to any layer element:

Se pueden adjuntar comentarios a cualquier elemento de capa.

Un comentario puede estar vinculado a cualquier número de elementos o a ninguno.A comment can be linked to any number of elements, including none.

Use lo siguiente para obtener los comentarios adjuntos a un elemento de capa:To get the comments that are attached to a layer element, use:

ILayerModel model = diagram.GetLayerModel();
IEnumerable<ILayerComment> comments =
   model.Comments.Where(comment =>
      comment.Links.Any(link => link.Target == layerElement));

Caution

La propiedad Comments de ILayer obtiene los comentarios incluidos en ILayer,The Comments property of an ILayer gets comments that are contained within the ILayer. pero no los comentarios vinculados a dicha capa.It does not get the comments that are linked to it.

Crear un comentario mediante una llamada a CreateComment() en el contenedor correspondiente.Create a comment by calling CreateComment() on the appropriate container.

Para crear un vínculo, use CreateLink() en el comentario.Create a link by using CreateLink() on the comment.

Elementos de capaLayer Elements

Todos los tipos de elemento que se pueden incluir en un modelo son elementos de capa:All the types of element that can be contained in a model are layer elements:

dependencia diagrama son ILayerElements.

PropiedadesProperties

Cada ILayerElement tiene un diccionario de cadenas denominado Properties.Each ILayerElement has a string dictionary named Properties. Este diccionario se puede usar para incorporar información arbitraria acerca de cualquier elemento de capa.You can use this dictionary to attach arbitrary information to any layer element.

Referencias de artefactoArtifact References

Una referencia de artefacto (ILayerArtifactReference) representa el vínculo entre una capa y un elemento del proyecto, como un archivo, una clase o una carpeta.An artifact reference (ILayerArtifactReference) represents the link between a layer and a project item such as a file, class, or folder. El usuario crea artefactos cuando crea una capa o agregarle al arrastrar elementos desde el Explorador de soluciones, vista de clases o Examinador de objetos a un diagrama de dependencia.The user creates artifacts when they create a layer or add to it by dragging items from Solution Explorer, Class View, or Object Browser onto a dependency diagram. Se puede vincular a una capa un número indeterminado de referencias de artefacto.Any number of artifact references can be linked to a layer.

Cada fila del Explorador de capas muestra una referencia de artefacto.Each row in Layer Explorer displays an artifact reference. Para obtener más información, consulte crear diagramas de dependencia desde el código.For more information, see Create dependency diagrams from your code.

Los métodos y tipos principales relacionados con las referencias de artefactos son los siguientes:The principal types and methods concerned with artifact references are as follows:

ILayerArtifactReference.ILayerArtifactReference. La propiedad Categories indica el tipo de artefacto al que se está haciendo referencia, como una clase, un archivo ejecutable o un ensamblado.The Categories property indicates what kind of artifact is referenced, such as a class, executable file, or assembly. La propiedad Categories determina cómo el identificador identifica el artefacto de destino.The Categories property determines how the Identifier identifies the target artifact.

CreateArtifactReferenceAsync crea una referencia de artefacto a partir de un Project o de un ProjectItem.CreateArtifactReferenceAsync creates an artifact reference from an Project or ProjectItem. Se trata de una operación asincrónica,This is an asynchronous operation. Por lo tanto, suele proporcionar una devolución de llamada que se llama cuando finaliza la creación.Therefore, you usually provide a callback that is called when the creation completes.

Referencias de artefacto de capa son diferentes a los artefactos en diagramas de casos de uso.Layer Artifact References are different to Artifacts in use case diagrams.

Formas y diagramasShapes and Diagrams

Se usan dos objetos para representar a cada elemento en un modelo de capas: ILayerElement y IShape.Two objects are used to represent each element in a layer model: an ILayerElement, and an IShape. IShape señala la posición y el tamaño de la forma en el diagrama.The IShape represents the position and size of the shape on the diagram. En los modelos de capas, cada ILayerElement tiene uno IShapey cada IShape en una dependencia de diagrama tiene uno ILayerElement.In layer models, every ILayerElement has one IShape, and every IShape on a dependency diagram has one ILayerElement. IShape también se usa en los modelos UML.IShape is also used for UML models. Por lo tanto, no todos los IShape poseen un elemento de capa.Therefore, not every IShape has a layer element.

De igual modo, el ILayerModel se muestra en un IDiagram.In the same manner, the ILayerModel is displayed on one IDiagram.

En el código de un controlador de gesto o comando personalizado se puede obtener el diagrama actual y la selección de formas actual de la importación de DiagramContext:In the code of a custom command or gesture handler, you can get the current diagram and the current selection of shapes from the DiagramContext import:

public class ... {
[Import]
    public IDiagramContext DiagramContext { get; set; }
...
public void ... (...)
{ IDiagram diagram = this.DiagramContext.CurrentDiagram;
  ILayerModel model = diagram.GetLayerModel();
  if (model != null)
  { foreach (ILayer layer in model.Layers) { ... }}
  foreach (IShape selected in diagram.SelectedShapes)
  { ILayerElement element = selected.GetLayerElement();
    if (element != null) ... }}

Cada ILayerElement se presenta mediante un objeto IShape.

IShape y IDiagram también se usan para mostrar modelos UML.IShape and IDiagram are also used to display UML models.

Vea tambiénSee Also