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

En este tema se describen los elementos y relaciones en los modelos de capas por los que se puede navegar y que se pueden actualizar mediante código de programa.This topic 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 de punto de vista del usuario, consulte diagramas de dependencia: referencia y diagramas de dependencia: directrices.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 descrito en este tema es una fachada en general más 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 gesto o comando de menú, use 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 actualice un modelo, considere insertar los cambios en una ILinkedUndoTransaction.When you update a model, consider enclosing the changes in a ILinkedUndoTransaction. Esto hace que los cambios estén condensados en una única transacción.This groups your changes into one transaction. Si alguno de los cambios no se produjera, se revertirá la transacción entera.If any of the changes fails, the whole transaction will be rolled back. Si el usuario deshace un cambio, todos los demás cambios también se desharán.If the user undoes a change, all the changes will be 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. ILayer and ILayerModel can both contain 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. An ILayerDependencyLink connects two 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. Comments can be attached to any layer element.

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));  

Precaución

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.

Para crear un comentario, invoque a CreateComment() en el contenedor correspondiente.Create a comment by invoking 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. dependency diagram contents are 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 al crear una capa o agregarle al arrastrar elementos desde el Explorador de soluciones, vista de clases y 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. Las categorías establecen la forma en la que el identificador va a distinguir el artefacto de destino.Categories 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 que se suele proporcionar una devolución de llamada a la que se llama cuando la creación ha finalizado.Therefore, you usually provide a callback that is called when the creation is complete.

Las referencias de artefacto de capa no se deben confundir con los artefactos de los diagramas de casos de uso.Layer Artifact References should not be confused with 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 diagrama tiene un 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. Each ILayerElement is presented by an 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

Agregar comandos y gestos a diagramas de dependencia Add commands and gestures to dependency diagrams
Agregar validación de arquitectura personalizada a diagramas de dependencia Add custom architecture validation to dependency diagrams
Agregar propiedades personalizadas a diagramas de dependencia Add custom properties to dependency diagrams
Diagramas de dependencia: referencia Dependency Diagrams: Reference
Diagramas de dependencia: instruccionesDependency Diagrams: Guidelines