Compartilhar via


Navegando e atualizar modelos de camada no código de programa

Este tópico descreve os elementos e as relações nos modelos de camada, que você pode navegar e atualizar em Visual Studio Ultimate usando o código de programa.

Para obter mais informações sobre diagramas da camada do ponto de vista de usuário, consulte Diagramas de camada: referência e Diagramas de camada: diretrizes.

O modelo de Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer descrito nesse tópico é uma fachada mais em um modelo de Microsoft.VisualStudio.GraphModel geral.Se você estiver escrevendo extensão de comando de menu ou do gesto, use o modelo de Layer .Se você estiver escrevendo mergulhe a extensão de validação, é mais fácil de usar GraphModel.

Transações

Quando você atualiza um modelo, considere incluir as alterações em ILinkedUndoTransaction.Esses grupos suas alterações em uma transação.Se quaisquer das alterações falham, a transação inteira será revertida.Se o usuário desfaz uma alteração, todas as alterações serão desfeitas juntos.

Para obter mais informações, consulte Como: atualizações do modelo de Link usando transações.

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

Retenção

ILayer e ILayerModel podem conter ILayers.

As camadas (ILayer) e o modelo de camada (ILayerModel) podem conter comentários e camadas.

Uma camada (ILayer) pode ser contido em um modelo de camada (ILayerModel) ou nele pode ser aninhadas dentro de outro ILayer.

Para criar um comentário ou uma camada, use os métodos de design no recipiente apropriado.

Um link de dependência é representado por um objeto.Pode navegar em qualquer direção:

Um ILayerDependencyLink conecta duas ILayers.

Para criar um link de dependência, chame source.CreateDependencyLink(target).

Comentários

Comentários podem estar contidos dentro das camadas ou modelo de camada, e também podem ser associados a qualquer elemento de camada:

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

Um comentário pode ser associado a qualquer número de elementos, não incluindo quaisquer.

Para obter os comentários que são anexados a um elemento de nível, uso:

ILayerModel model = diagram.GetLayerModel(); 
IEnumerable<ILayerComment> comments = 
   model.Comments.Where(comment => 
      comment.Links.Any(link => link.Target == layerElement));
Observação de cuidadoCuidado

A propriedade de Comments de ILayer obtém os comentários que estão contidos em ILayer.Não obtém os comentários que são associados a ele.

Crie um comentário chamar CreateComment() no recipiente apropriado.

Crie um link usando CreateLink() no comentário.

Mergulhe elementos

Todos os tipos de elemento que pode estar contido em um modelo são elementos de camada:

Conteúdo da camada diagrama é ILayerElements.

Propriedades

Cada ILayerElement tem um dicionário de cadeia de caracteres chamado Properties.Você pode usar esse dicionário para anexar informações arbitrária para qualquer elemento de camada.

Referências de produto

Uma referência de produto (ILayerArtifactReference) representa o link entre uma camada e item de projeto como um arquivo, a classe, ou pasta.Quando o usuário cria ou adicionar a uma camada arrastando itens no diagrama da camada do solution Explorer ou da arquitetura Explorer, está criando artefatos.Qualquer número de referências de produto pode ser associado a uma camada.

Cada linha na camada Explorer exibe uma referência de produto.Para obter mais informações, consulte Criar diagramas de camada a partir do código.

O principal tipos e métodos preocupados com referências de produto são:

ILayerArtifactReference.A propriedade categorias indica o tipo de produto é referenciado, como uma classe, arquivo executável, ou assembly.As categorias determinam como o identificador identifica o produto de destino.

CreateArtifactReferenceAsync cria uma referência de produto de Project ou de ProjectItem.Esta é uma operação assíncrona.Portanto, você geralmente fornece um retorno de chamada que é chamado quando a criação concluída.

Referências de produto da camada não devem ser ofuscadas com os artefatos em diagramas dos casos de uso.

Formas e diagramas

Dois objetos são usados para representar cada elemento em um modelo de camada: ILayerElement, e IShape.IShape representa a posição e tamanho da forma no diagrama.Em modelos de camada, cada ILayerElement tem um IShape, e cada IShape em um diagrama de camada tem um ILayerElement.IShape também é usado para modelos de UML.Portanto, não cada IShape possui um elemento de camada.

Da mesma forma, ILayerModel é exibido em um IDiagram.

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

IShape e IDiagram também são usados para exibir modelos de UML.Para obter mais informações, consulte Como: exibir um modelo em diagramas.

Consulte também

Conceitos

Adicionando comandos e gestos para diagramas de camada

Adicionar validação personalizada da arquitetura a diagramas de camada

Adicionar propriedades personalizadas a um diagrama de camada

Diagramas de camada: referência

Diagramas de camada: diretrizes

Diagramas e modelos UML estendendo