Compartir a través de


Navegar y actualizar modelos de capas en el código del programa

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 en Visual Studio Ultimate a través de código de programa.

Para más información sobre los diagramas de capas desde el punto de vista del usuario, vea Diagramas de capas: Referencia y Diagrama de capas: Instrucciones.

El modelo Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer descrito en este tema sirve de escaparate a un modelo Microsoft.VisualStudio.GraphModel, de naturaleza mucho más general. Si va a escribir un comando de menú o extensión de gesto, use el modelo Layer. Si va a escribir una extensión de validación de capas, lo más fácil es utilizar GraphModel.

Transacciones

Cuando actualice un modelo, considere insertar los cambios en una ILinkedUndoTransaction. Esto hace que los cambios estén condensados en una única transacción. Si alguno de los cambios no se produjera, se revertirá la transacción entera. Si el usuario deshace un cambio, todos los demás cambios también se desharán.

Para obtener más información, vea Cómo: Vincular actualizaciones del modelo mediante transacciones.

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

Inclusiones

Tanto ILayer como ILayerModel pueden contener ILayers.

Las capas (ILayer) y el modelo de capas (ILayerModel) pueden incluir comentarios y capas.

Una capa (ILayer) puede incluirse en un modelo de capas (ILayerModel) o anidarse en otra ILayer.

Para crear un comentario o una capa, use los métodos de creación pertinentes del contenedor adecuado.

Vínculos de dependencias

Un vínculo de dependencia se representa mediante un objeto. La navegación puede producirse en cualquier dirección:

Un objeto ILayerDependencyLink conecta dos ILayers.

Llame a source.CreateDependencyLink(target) para crear un vínculo de dependencia.

Comentarios

Los comentarios pueden incluirse en capas o en el modelo de capas, así como vincularse a cualquier elemento de capa:

Se pueden adjuntar comentarios a cualquier elemento de capa.

Un comentario puede estar vinculado a cualquier número de elementos o a ninguno.

Use lo siguiente para obtener los comentarios adjuntos a un elemento de capa:

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

Advertencia

La propiedad Comments de ILayer obtiene los comentarios incluidos en ILayer,pero no los comentarios vinculados a dicha capa.

Para crear un comentario, invoque a CreateComment() en el contenedor correspondiente.

Para crear un vínculo, use CreateLink() en el comentario.

Elementos de capa

Todos los tipos de elemento que se pueden incluir en un modelo son elementos de capa:

Lo que contiene el diagrama de capas son ILayerElements.

Propiedades

Cada ILayerElement tiene un diccionario de cadenas denominado Properties. Este diccionario se puede usar para incorporar información arbitraria acerca de cualquier elemento de capa.

Referencias de artefacto

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. Los artefactos se crean cuando un usuario crea o agrega una capa arrastrando elementos al diagrama de capas desde el Explorador de soluciones o el Explorador de arquitectura. Se puede vincular a una capa un número indeterminado de referencias de artefacto.

Cada fila del Explorador de capas muestra una referencia de artefacto. Para obtener más información, vea Crear diagramas de capas a partir del código.

Los métodos y tipos principales relacionados con las referencias de artefactos son los siguientes:

ILayerArtifactReference. La propiedad Categories indica el tipo de artefacto al que se está haciendo referencia, como una clase, un archivo ejecutable o un ensamblado. Las categorías establecen la forma en la que el identificador va a distinguir el artefacto de destino.

CreateArtifactReferenceAsync crea una referencia de artefacto a partir de un Project o de un ProjectItem. Se trata de una operación asincrónica, por lo que se suele proporcionar una devolución de llamada a la que se llama cuando la creación ha finalizado.

Las referencias de artefacto de capa no se deben confundir con los artefactos de los diagramas de casos de uso.

Formas y diagramas

Se utilizan dos objetos para representar a cada elemento en un modelo de capas: un ILayerElement y un IShape. IShape señala la posición y el tamaño de la forma en el diagrama. En los modelos de capas, cada ILayerElement tiene un IShape y cada IShape en el diagrama de capas tiene un ILayerElement. IShape también se usa en los modelos UML. Por lo tanto, no todos los IShape poseen un elemento de capa.

De igual modo, el ILayerModel se muestra en un 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:

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. Para obtener más información, vea Cómo: Mostrar un modelo en diagramas.

Vea también

Conceptos

Agregar comandos y gestos a diagramas de capas

Agregar validación de arquitectura personalizada a diagramas de capas

Agregar propiedades personalizadas a diagramas de capas

Diagramas de capas: Referencia

Diagrama de capas: Instrucciones

Ampliar modelos y diagramas UML