Navegar e atualizar modelos de camada no código do programaNavigate and update layer models in program code

Este artigo descreve os elementos e relações em modelos de camada, o que você pode navegar e atualizar usando o código do programa.This article describes the elements and relationships in layer models, which you can navigate and update by using program code. Para obter mais informações sobre diagramas de dependência do ponto de vista do usuário, consulte diagramas de dependência: referência e diagramas de dependência: diretrizes.For more information about dependency diagrams from the user's point of view, see Dependency Diagrams: Reference and Dependency Diagrams: Guidelines.

O Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer modelo descrito neste tópico é uma fachada em um mais geral 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. Se você estiver escrevendo uma extensão de gesto ou comando de menu, use o Layer modelo.If you are writing a menu command or gesture extension, use the Layer model. Se você estiver escrevendo uma extensão de validação de camada, é mais fácil de usar o GraphModel.If you are writing a layer validation extension, it is easier to use the GraphModel.

TransaçõesTransactions

Quando você atualiza um modelo, considere incluir as alterações em um ILinkedUndoTransaction, que agrupa as alterações em uma transação.When you update a model, consider enclosing the changes in a ILinkedUndoTransaction, which groups your changes into one transaction. Se qualquer uma das alterações falhar, toda a transação será revertida.If any of the changes fails, the whole transaction is rolled back. Se o usuário desfizer uma alteração, todas as alterações serão desfeitas em conjunto.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!
}

ConfinamentoContainment

ILayer e ILayerModel podem conter ILayers.

As camadas (ILayer) e o modelo de camada (ILayerModel) podem conter Comentários e Camadas.Layers (ILayer) and the layer model (ILayerModel) can contain Comments and Layers.

Uma camada (ILayer) pode estar contida em um modelo de camada (ILayerModel) ou pode ser aninhada em outra ILayer.A layer (ILayer) can be contained in a layer model (ILayerModel) or it can be nested within another ILayer.

Para criar um comentário ou uma camada, use os métodos de criação no contêiner apropriado.To create a comment or a layer, use the creation methods on the appropriate container.

Um vínculo de dependência é representado por um objeto.A dependency link is represented by an object. Ele pode ser navegado em qualquer direção:It can be navigated in either direction:

Um ILayerDependencyLink conecta dois ILayers.

Para criar um vínculo de dependência, chame source.CreateDependencyLink(target).To create a dependency link, call source.CreateDependencyLink(target).

ComentáriosComments

Os comentários podem ser encontrados dentro de camadas ou do modelo de camada e também podem ser vinculados a qualquer elemento de camada:Comments can be contained inside layers or the layer model, and can also be linked to any layer element:

Comentários podem ser anexados a qualquer elemento de camada.

Um comentário pode ser vinculado a qualquer número de elementos, incluindo zero.A comment can be linked to any number of elements, including none.

Para obter os comentários anexados a um elemento de camada, use: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

A propriedade Comments de uma ILayer recebe comentários que estão contidos na ILayer.The Comments property of an ILayer gets comments that are contained within the ILayer. Não recebe os comentários vinculados a ela.It does not get the comments that are linked to it.

Criar um comentário chamando CreateComment() no contêiner apropriado.Create a comment by calling CreateComment() on the appropriate container.

Crie um link usando CreateLink() no comentário.Create a link by using CreateLink() on the comment.

Elementos de camadaLayer Elements

Todos os tipos de elementos que podem estar contidos em um modelo são elementos de camada:All the types of element that can be contained in a model are layer elements:

conteúdo do diagrama de dependência é ILayerElements.

PropriedadesProperties

Cada ILayerElement tem um dicionário de cadeia chamado Properties.Each ILayerElement has a string dictionary named Properties. Você pode usar este dicionário para anexar informações arbitrárias a qualquer elemento da camada.You can use this dictionary to attach arbitrary information to any layer element.

Referências de artefatoArtifact References

Uma referência de artefato (ILayerArtifactReference) representa um vínculo entre uma camada e um item de projeto, como um arquivo, classe ou pasta.An artifact reference (ILayerArtifactReference) represents the link between a layer and a project item such as a file, class, or folder. O usuário cria artefatos quando criar uma camada ou adicionar a ele arrastando itens do Gerenciador de soluções, exibição de classe ou Pesquisador de objetos para um diagrama de dependência.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. Qualquer número de referências de artefato pode ser vinculado a uma camada.Any number of artifact references can be linked to a layer.

Cada linha do Gerenciador de Camadas exibe uma referência de artefato.Each row in Layer Explorer displays an artifact reference. Para obter mais informações, consulte criar diagramas de dependência do seu código.For more information, see Create dependency diagrams from your code.

Os principais tipos e métodos relacionados a referências de artefato são os seguintes:The principal types and methods concerned with artifact references are as follows:

ILayerArtifactReference.ILayerArtifactReference. A propriedade Categorias indica que tipo de artefato é referenciado, tal como uma classe, arquivo executável ou assembly.The Categories property indicates what kind of artifact is referenced, such as a class, executable file, or assembly. A propriedade categorias determina como o identificador identifica o artefato de destino.The Categories property determines how the Identifier identifies the target artifact.

CreateArtifactReferenceAsync cria uma referência de artefato de um Project ou ProjectItem.CreateArtifactReferenceAsync creates an artifact reference from an Project or ProjectItem. Esta é uma operação assíncrona.This is an asynchronous operation. Portanto, você geralmente fornece um retorno de chamada que é chamado quando a criação for concluída.Therefore, you usually provide a callback that is called when the creation completes.

Referências de artefato de camada são diferentes para artefatos em diagramas de caso de uso.Layer Artifact References are different to Artifacts in use case diagrams.

Formas e diagramasShapes and Diagrams

Dois objetos são usados para representar cada elemento em um modelo de camadas: um ILayerElement e um IShape.Two objects are used to represent each element in a layer model: an ILayerElement, and an IShape. O IShape representa a posição e o tamanho da forma no diagrama.The IShape represents the position and size of the shape on the diagram. Nos modelos de camadas, cada ILayerElement tem um IShapee cada IShape em uma dependência diagrama tem um ILayerElement.In layer models, every ILayerElement has one IShape, and every IShape on a dependency diagram has one ILayerElement. IShape também é usado para modelos UML.IShape is also used for UML models. Portanto, nem todo IShape tem um elemento de camada.Therefore, not every IShape has a layer element.

Da mesma maneira, o ILayerModel é exibido em um IDiagram.In the same manner, the ILayerModel is displayed on one IDiagram.

No código de um comando personalizado ou manipulador de gestos, você pode obter o diagrama atual e a seleção atual de formas da importação do 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 é apresentado por um IShape.

IShape e IDiagram também são usados para exibir modelos UML.IShape and IDiagram are also used to display UML models.

Consulte tambémSee Also