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


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

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

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

Модель Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer, описанная в этом разделе façade на несколько общих модели 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.Свойство "Категории" обозначает вид артефакта, на который создается ссылка, например класс, исполняемый файл или сборка.Свойство "Категории" определяет, как идентификатор идентифицирует целевой артефакт.

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