Поделиться через


Перемещение по моделям слоев в коде программы и их обновление

В этом разделе рассматриваются элементы и отношения в моделях слоев, к которым можно перейти и которые можно обновить в Visual Studio Ultimate с помощью кода.

Дополнительные сведения о схемах слоев с точки зрения пользователя см. в разделах Схемы слоев: справочные материалы и Схемы слоев: рекомендации.

Модель Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer, описываемая в этом разделе, является интерфейсом более общей модели Microsoft.VisualStudio.GraphModel. При написании расширения команды меню или жеста используйте модель Layer. При написании расширения проверки слоев гораздо удобнее использовать GraphModel.

Транзакции

При обновлении модели рекомендуется заключить изменения в транзакцию ILinkedUndoTransaction. Это позволяет сгруппировать изменения в рамках одной транзакции. В случае сбоя любых изменений будет выполнен откат всей сборки. Если пользователь отменяет изменение, все изменения будут отменены.

Для получения дополнительной информации см. Практическое руководство. Связывание обновлений модели с использованием транзакций.

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

Вложения

Элементы ILayer могут содержаться в как в элементе ILayer, так и в элементе ILayerModel.

Слои (ILayer) и модель слоев (ILayerModel) могут содержать комментарии и слои.

Слой (ILayer) может содержаться в модели слоев (ILayerModel) или быть вложенным в другой ILayer.

Для создания комментария или слоя используйте методы создания в соответствующем контейнере.

Связи зависимостей

Связь зависимости представлена объектом. Навигация для нее возможна в любом направлении:

ILayerDependencyLink соединяет два элемента ILayer.

Чтобы создать связь зависимости, вызовите метод source.CreateDependencyLink(target).

Комментарии

Комментарии могут содержаться внутри слоев или модели слоев, кроме того, они могут быть связаны с другим элементом слоя:

Комментарии можно прикрепить к любому элементу слоя.

Комментарий может быть связан с любым числом элементов (включая нуль).

Чтобы получить комментарии, прикрепленные к элементу слоя, используйте код:

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

Предупреждение

Свойство Comments слоя ILayer получает комментарии, вложенные в ILayer.Оно не получает комментарии, связанные с ним.

Создайте комментарий, вызвав метод CreateComment() в соответствующем контейнере.

Создайте связь, используя CreateLink() в комментарии.

Элементы слоя

Все типы элементов, которые могут содержаться в модели, являются элементами слоя:

Схема слоев содержит элементы ILayerElement.

Свойства

Каждый ILayerElement включает словарь строк с именем Properties. Этот словарь можно использовать для присоединения произвольных сведений к любому элементу слоя.

Ссылки на артефакты

Ссылка на артефакт (ILayerArtifactReference) представляет связь между слоем и элементом проекта, таким как файл, класс или папка. Когда пользователи создают или добавляют элементы в слой, перетаскивая их на схему слоя из обозревателя решений или обозревателя архитектуры, они создают артефакты. К слою может быть привязано любое число ссылок на артефакты.

В каждой строке обозревателя слоев отображается ссылка на артефакт. Для получения дополнительной информации см. Создание схем слоев из кода.

Основные типы и методы, затрагиваемые ссылками на артефакты, следующие:

ILayerArtifactReference. Свойство Categories указывает, на какой тип артефакта имеется ссылка (например, класс, исполняемый файл или сборка). Категории определяют, каким образом идентификатор идентифицирует целевой артефакт.

CreateArtifactReferenceAsync создает ссылку артефакта на основе Project или ProjectItem. Это асинхронная операция. Поэтому обычно требуется предоставить метод обратного вызова, вызываемый при завершении создания.

Ссылки на артефакты слоя не следует путать с артефактами в схемах вариантов использования.

Фигуры и схемы

Для представления каждого элемента в модели слоев используются два объекта: ILayerElement и IShape. IShape представляет положение и размер фигуры на схеме. В модели слоев каждому ILayerElement назначается один объект IShape, а каждому объекту IShape на схеме слоя — один элемент ILayerElement. IShape также используется для моделей UML. Поэтому не каждому объекту IShape назначается элемент слоя.

Аналогично, ILayerModel отображается на одной схеме IDiagram.

В коде пользовательского обработчика команды или жеста можно получить текущую схему и текущий набор фигур, используя импорт 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) ... }}

Каждый элемент ILayerElement представлен фигурой IShape.

IShape и IDiagram также используются для отображения моделей UML. Для получения дополнительной информации см. Практическое руководство. Отображение модели на схемах.

См. также

Основные понятия

Добавление команд и жестов в схемы слоев

Добавление пользовательской проверки архитектуры в схемы слоев

Добавление пользовательских свойств в схемы слоев

Схемы слоев: справочные материалы

Схемы слоев: рекомендации

Расширение моделей и схем UML