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


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

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

На схеме слоев, как и на традиционной схеме архитектуры, показаны основные компоненты или функциональные единицы структуры и их взаимозависимости. Каждый узел на схеме называется слоем и представляет логическую группу пространств имен, проектов или других артефактов. Можно нарисовать зависимости, которые должны существовать в разработке. В отличие от традиционной схемы архитектуры можно проверить, что фактические зависимости в исходном коде соответствуют заданным предполагаемым зависимостям. Сделав проверку частью обычного построения в Team Foundation Server, можно обеспечить соответствие программного кода архитектуре системы при внесении изменений в будущем.

Сведения об элементах на схемах слоев и их свойствах см. в разделе Схемы слоев: справочные материалы.

Разработка или обновление приложения с использованием схем слоев

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

Примечание

Порядок шагов — примерный.Вероятно, потребуется перекрыть эти задачи и изменить их порядок в соответствии с конкретной ситуацией; кроме того, необходимо пересматривать предложенную процедуру в начале каждой итерации проекта.

  1. Создайте схему слоев для всего приложения или для слоя в нем.

  2. Определите слои, представляющие основные функциональные области или компоненты приложения. Называть эти слои следует в соответствии с их функциями, например "Презентация" или "Службы". В Visual Studio можно связать каждый слой с коллекцией артефактов, таких как проекты, пространства имен, файлы и т. д.

  3. Определите существующие зависимости между слоями.

  4. Измените слои и зависимости, чтобы показать обновленную разработку, которая должна отражаться в коде.

  5. Разработайте новые области приложения, создав слои, чтобы представить основные блоки или компоненты архитектуры, и определив зависимости, чтобы показать, как каждый слой использует остальные.

  6. Измените структуру и внешний вид схемы, чтобы было удобнее обсуждать ее с коллегами.

  7. Проверьте соответствие кода схеме слоев, чтобы обнаружить конфликты между кодом и требуемой архитектурой.

  8. Обновите код, чтобы он соответствовал новой архитектуре. Продолжайте создавать и оптимизировать код до тех пор, пока при проверке не будет выявляться ни одного конфликта.

  9. Включите проверку слоев в процесс построения, чтобы обеспечить соответствие кода разработке в дальнейшем.

Создайте схему слоев

Схема слоев должна создаваться внутри проекта моделирования. Можно добавить новую схему слоев в существующий проект моделирования или создать в решении новый проект моделирования для новой схемы слоев.

Добавление новой схемы слоев в проект моделирования

  1. В меню Архитектура выберите пункт Создать схему.

  2. В категории Шаблоны выберите пункт Схема слоев.

  3. Назовите схему

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

    – или –

    Щелкните Создать новый проект моделирования, чтобы добавить в решение новый проект моделирования.

    Примечание

    Схема слоя должна существовать внутри проекта моделирования.Однако ее можно связать с артефактом, который существует в любом другом месте решения.

Можно также скопировать существующую схему слоев внутри того же проекта моделирования.

Примечание

Не следует добавлять, перетаскивать или копировать существующую схему слоев из одного проекта моделирования в другой проект моделирования или в другое местоположение в решении.Скопированная таким образом схема слоев будет содержать те же ссылки, что и исходная схема, даже если внести в эту схему изменения.В результате проверка схемы будет работать неправильно, и возможно возникновение прочих проблем, таких как отсутствующие элементы или другие ошибки при попытке открытия схемы.

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

Копирование существующей схемы слоев

  1. Добавьте новую схему слоев в проект моделирования.

  2. Скопируйте элементы из исходной схемы слоев в новую схему.

Определение слоев, представляющих основные функциональные области или компоненты

Слои представляют логические группы артефактов, таких как проекты, файлы с кодом, пространства имен, классы и методы. Можно создавать слои из артефактов в решении Visual Studio или прикреплять к слою спецификации или планы, создавая ссылки на документы, такие как файлы Word или презентации PowerPoint. Каждый слой отображается на схеме в виде прямоугольника с указанием числа артефактов, связанных с ним. Слой может содержать вложенные слои, которые описывают более мелкие задачи.

Как правило, слои следует называть в соответствии с их функциями, например "Презентация" или "Службы". Тесно взаимосвязанные артефакты следует размещать в одном слое. Артефакты, которые можно обновлять по отдельности или использовать в разных приложениях, должны размещаться в разных слоях. Дополнительные сведения о шаблонах уровней см. на сайте Patterns & Practices (шаблоны и рекомендации) на странице https://go.microsoft.com/fwlink/?LinkId=145794.

Примечание

Существуют определенные типы артефактов, которые можно связать со слоями, но которые не поддерживают проверку относительно схемы слоя.Чтобы узнать, позволяет ли артефакт проводить проверку, откройте Обозреватель слоев, чтобы просмотреть свойство Поддержка проверки ссылки на артефакт.Дополнительные сведения см. в разделе Управление связями между слоями и артефактами.

При обновлении незнакомого приложения можно использовать графы зависимостей, чтобы изучить и понять код. Эти графы помогают находить кластеры и зависимости в коде. Кроме того, можно использовать обозреватель архитектуры, чтобы изучить пространства имен и классы, которые часто находятся в точном соответствии с существующими слоями. Это облегчит назначение артефактов слоям. Затем схемы слоев можно использовать для обновления кода.

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

Используйте следующие задачи для создания слоев:

Цель

Выполните следующие действия

Создать слой для одного артефакта

  1. Перетащите артефакт на схему слоев из любого из следующих источников.

    Слой отображается на схеме и связан с артефактом.

  2. Переименуйте слой, чтобы отразить обязанности связанного кода или артефактов.

Создайте один слой для всех выбранных артефактов.

Одновременно перетащите на схему все выбранные артефакты.

Слой отображается на схеме и связан со всей группой артефактов.

Создать слой для каждого выбранного артефакта.

Нажмите и удерживайте клавишу SHIFT, одновременно перетаскивая все артефакты на схему слоев.

ПримечаниеПримечание
При использовании клавиши SHIFT для выбора диапазона элементов отпустите клавишу после выбора артефактов.Нажмите и удерживайте ее снова при перетаскивании артефактов в схему.

Слой для каждого артефакта отображается на схеме и связан с этим артефактом.

Добавить артефакт в слой.

Перетащите артефакт в слой.

Создание нового несвязанного слоя

На Панели инструментов разверните раздел Схема слоя, затем перетащите Слой в схему слоя.

Чтобы добавить несколько слоев, дважды щелкните средство. Завершив все операции, выберите средство Указатель или нажмите клавишу ESC.

— или —

Щелкните правой кнопкой мыши схему слоев, щелкните Добавить и выберите Слой.

Например, это позволяет представить часть приложения, разработка которой еще не началась. Рекомендуется на ранней стадии разработки создавать код местозаполнителя для таких слоев.

Создать вложенные слои

Перетащите существующий слой на другой слой.

— или —

Щелкните слой правой кнопкой мыши, укажите Добавить, затем выберите пункт Слой.

Создание нового слоя, который содержит два или более существующих слоев

Выделите слои, щелкните выделенные слои правой кнопкой мыши, затем щелкните Группировать.

Изменение цвета слоя

Присвойте свойству Цвет в качестве значения необходимый цвет.

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

Введите пространства имен в свойстве слоя Запрещенные зависимости пространства имен. Для разделения пространств имен используйте точку с запятой (;).

Указание, что артефакт, связанный со слоем, не должен более принадлежать указанному пространству имен

Введите пространства имен в свойстве слоя Запрещенные пространства имен. Для разделения пространств имен используйте точку с запятой (;).

Указание, что артефакт, связанный со слоем, должен принадлежать одному из указанных пространств имен

Введите пространство имен в свойстве слоя Обязательные пространства имен. Для разделения пространств имен используйте точку с запятой (;).

Управление ссылками между слоями и артефактами

  1. На схеме слоев щелкните слой правой кнопкой мыши и выберите Просмотреть ссылки.

    Обозреватель слоев отображает артефакты, связанные с выбранным слоем. Чтобы просмотреть все артефакты, связанные со слоями на схеме, щелкните схему.

  2. Для управления этими ссылками можно использовать следующие задачи:

    Цель

    В Обозревателе слоев

    Удалить ссылку между слоем и артефактом

    Щелкните ссылку артефакта правой кнопкой мыши и выберите Удалить.

    Переместить ссылку из одного слоя в другой

    Перетащите ссылку артефакта в существующий слой на схеме.

    — или —

    1. Щелкните ссылку артефакта правой кнопкой мыши и выберите Вырезать.

    2. На схеме слоев щелкните этот слой правой кнопкой мыши и выберите Вставить.

    Скопировать ссылку из одного слоя в другой

    1. Щелкните ссылку артефакта правой кнопкой мыши и выберите Копировать.

    2. На схеме слоев щелкните этот слой правой кнопкой мыши и выберите Вставить.

    Создать новый слой из существующей ссылки артефакта

    Перетащите ссылку артефакта в пустую область на схеме.

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

    Просмотрите столбец Поддержка проверки, чтобы найти ссылку артефакта.

    Артефакты, которые не поддерживают проверку относительно схемы слоев, включают проекты C++, веб-сайты, документы Office и простые текстовые файлы. Эти артефакты можно связать со слоями, но в процессе проверки они будут проигнорированы. Ошибки проверки для ссылок на проекты или сборки, связанные с отдельными слоями, отображаются только в том случае, если между этими слоями отображаются зависимости. Эти ссылки считаются зависимостями, только если используются в коде.

Обнаружение существующих зависимостей между слоями

Зависимость существует там, где артефакт, связанный с одним слоем, ссылается на артефакт, связанный с другим слоем. Например, класс в одном слое объявляет переменную, которая имеет класс в другом слое. Обнаружить существующие зависимости можно с помощью реконструирования.

Примечание

Для определенных видов артефактов выполнить реконструирование зависимостей невозможно.Например, зависимости не могут быть реконструированы из или в слой, связанный с текстовым файлом.Чтобы увидеть, какие артефакты имеют зависимости, которые можно реконструировать, щелкните правой кнопкой мыши один или несколько слоев и выберите Просмотреть ссылкиОбозревателе слоев просмотрите столбец Поддержка проверки.Зависимости не будут реконструированы для артефактов, для которых в данном столбце указано значение False.

Реконструирование существующих зависимостей между слоями

  • Выделите один или несколько слоев, щелкните выделенные элементы правой кнопкой мыши и выберите Создать зависимости.

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

Изменение слоев и зависимостей для отображения предполагаемой структуры

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

Цель

Выполните следующие действия

Удалить зависимость, которой не должно быть

Щелкните зависимость и нажмите клавишу DELETE.

Изменить или ограничить направление зависимости

Задайте значение для свойства Направление.

Создать новые зависимости

Используйте средства Зависимость и Двунаправленная зависимость.

Чтобы нарисовать несколько зависимостей, дважды щелкните средство. Завершив все операции, выберите средство Указатель или нажмите клавишу ESC.

Указание, что артефакт, связанный со слоем, не может зависеть от указанного пространства имен

Введите пространства имен в свойстве слоя Запрещенные зависимости пространства имен. Для разделения пространств имен используйте точку с запятой (;).

Указание, что артефакт, связанный со слоем, не должен более принадлежать указанному пространству имен

Введите пространства имен в свойстве слоя Запрещенные пространства имен. Для разделения пространств имен используйте точку с запятой (;).

Указание, что артефакт, связанный со слоем, должен принадлежать одному из указанных пространств имен

Введите пространство имен в свойстве слоя Обязательные пространства имен. Разделите пространства имен точкой с запятой (;).

Совершенствование структуры кода

Усовершенствования с целью оптимизации — это усовершенствования, которые не изменяют поведение приложения, но облегчают изменение и расширение кода в будущем. Грамотно структурированный код имеет вид, который легко абстрактно представить на схеме слоев.

Например, если создать слой для каждого пространства имен в коде и реконструировать зависимости, можно обнаружить, что между слоями существует минимальное число односторонних зависимостей. Создание более подробной схемы с использованием классов или методов в качестве слоев должно дать тот же результат.

В противном случае будет сложнее изменять код в течение срока существования и проводить проверки с использованием схем слоев.

Проектирование новых областей приложения

Начиная разработку нового проекта или новой области в проекте, можно создать слои и зависимости, которые помогут определить основные компоненты до начала разработки кода.

  • Покажите идентифицируемые архитектурные шаблоны на схемах слоев, если это возможно. Например, схема слоев, описывающая настольное приложение, может включать слои представления, логики домена и хранилища данных. Схема слоев, охватывающая одну функцию в приложении, может иметь слои модели, вида и контроллера. Дополнительные сведения о таких шаблонах см. в разделе Шаблоны и рекомендации: архитектура приложения.

    Если приходится часто создавать похожие шаблоны, можно создать настраиваемое средство. Дополнительные сведения см. в разделе Практическое руководство. Определение настраиваемого элемента панели элементов моделирования.

  • Создайте артефакт кода для каждого слоя, например пространство имен, класс или компонент. Это облегчает следование коду и связывание артефактов кода со слоями. Сразу после создания артефакта нужно связать его с соответствующим слоем.

  • Большинство классов и других артефактов не обязательно связывать со слоями, так как они являются частью более крупных артефактов, таких как пространства имен, которые уже связаны со слоями.

  • Создайте новую схему для новой функции. Как правило, имеется одна или несколько схем слоев, описывающих все приложение. Если разрабатывается новая функция внутри приложения, не нужно добавлять или изменять существующие схемы. Вместо этого нужно создать собственную схему, отражающую новые части кода. Слои на новой схеме могут включать слои представления, логики домена и базы данных для новой функции.

    При построении приложения код проверяется относительно общей схемы и более подробной схемы функций.

Изменение структуры для представления и обсуждения

Изменение внешнего вида и структуры схемы следующим образом поможет определять слои и зависимости и обсуждать их с членами команды.

  • изменить размеры, фигуры и положения слоев;

  • изменить цвета слоев и зависимостей.

    • Выделите один или несколько слоев или зависимостей, щелкните правой кнопкой мыши и выберите Свойства. В окне Свойства измените свойство Цвет.

Проверка кода относительно схемы

Завершив изменение схемы, можно в любой момент проверить ее на соответствие коду вручную (или проверять автоматически всякий раз при запуске локального построения). Проверка может также выполняться автоматически при каждом построении с помощью средства Team Foundation Server.

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

Добавление проверяемых сборок и проектов вручную

  1. В Обозревателе решений щелкните правой кнопкой мыши проект моделирования или папку Ссылки слоя и нажмите кнопку Добавить ссылку.

  2. В диалоговом окне Добавление ссылки выберите сборки или проекты и нажмите кнопку ОК.

Проверка кода из открытой схемы слоев вручную

  1. Щелкните правой кнопкой мыши поверхность схемы и выберите пункт Проверить архитектуру.

    Примечание

    По умолчанию свойству Действие построения в файле схемы слоев (LAYEDIAGRAM-файл) присвоено значение Проверить, т. е. схема включена в процесс проверки.

    В окне Список ошибок выводятся происходящие ошибки. Дополнительные сведения об ошибках проверок см. в разделе Общее представление об ошибках проверки слоев.

  2. Чтобы просмотреть источник каждой ошибки, дважды щелкните ошибку в окне Список ошибок.

    Примечание

    Visual Studio может вместо источника ошибки показывать граф зависимостей.Это происходит, если код имеет зависимость в сборке, не заданной схемой слоев, либо в коде отсутствует зависимость, заданная схемой слоев.Просмотрите граф зависимостей или код, чтобы определить, должна ли существовать зависимость.Дополнительные сведения о графах зависимостей см. в разделе Практическое руководство. Обзор документов с графами и навигация по этим документам.

  3. Сведения об устранении ошибок см. в разделе Обновление кода в соответствии с новой архитектурой.

Проверка кода вручную из командной строки

  1. Откройте командную строку Visual Studio.

    Чтобы открыть командную строку, последовательно щелкните Пуск, Все программы, Microsoft Visual Studio 2010, Средства Visual Studio и Командная строка Visual Studio 2010.

  2. Выберите один из следующих вариантов.

    • Чтобы проверить код на соответствие конкретному проекту моделирования в решении, запустите MSBuild со следующим пользовательским свойством.

      msbuild <FilePath+ModelProjectFileName>.modelproj
      /p:ValidateArchitecture=true
      

      - или -

      Откройте папку, в которой находится файл проекта моделирования (MODELPROJ-файл) и схема слоев, и запустите MSBuild со следующим пользовательским свойством.

      msbuild /p:ValidateArchitecture=true 
      
    • Чтобы проверить код на соответствие всем проектам моделирования в решении, запустите MSBuild со следующим пользовательским свойством.

      msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true 
      

      - или -

      Откройте папку решения, в которой должен находиться проект моделирования со схемой слоев, и запустите MSBuild со следующим пользовательским свойством.

      msbuild /p:ValidateArchitecture=true
      

    Отобразятся любые возникающие ошибки. Дополнительные сведения о MSBuild см. в разделах MSBuild и Задача MSBuild.

Дополнительные сведения об ошибках проверки см. в разделе Общее представление об ошибках проверки слоев.

Автоматическая проверка кода во время локального построения

  • Откройте файл проекта моделирования (.modelproj) в текстовом редакторе и включите следующее свойство.
<ValidateArchitecture>true</ValidateArchitecture>

- или -

  1. В Обозревателе решений щелкните правой кнопкой мыши проект моделирования, который содержит схему или схемы слоев, и выберите пункт Свойства.

  2. В окне Свойства свойству Проверка архитектуры проекта моделирования необходимо задать значение True.

    Это позволяет включить проект моделирования в процесс проверки.

  3. В Обозревателе решений щелкните файл схемы слоев (LAYERDIAGRAM-файл), который нужно использовать для проверки.

  4. Убедитесь, что свойство схемы Действие построения в окне Свойства имеет значение Проверить.

    Это позволяет включить схему слоев в процесс проверки.

Дополнительные сведения об ошибках проверки см. в разделе Общее представление об ошибках проверки слоев. Сведения об устранении ошибок см. в разделе Обновление кода в соответствии с новой архитектурой.

Обновление кода для обеспечения соответствия новой архитектуре

Как правило, ошибки отображаются при первой проверке кода на соответствие обновленной схеме слоев. Эти ошибки могут происходить по нескольким причинам.

  • Артефакт назначен неправильному слою. В этом случае необходимо переместить артефакт.

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

Для устранения этих ошибок нужно обновлять код до тех пор, пока при проверке не будет выявлено ни одной ошибки. Как правило, эту процедуру требуется выполнить несколько раз.

Примечание

Во время разработки или оптимизации кода может возникнуть необходимость связать новые артефакты со схемой слоев.Это не всегда необходимо, например, если слои представляют существующие пространства имен, а новый код только добавляет дополнительный материал в эти пространства имен.

В процессе разработки может понадобиться подавить некоторые конфликты, выявленные в ходе проверки. Например, можно подавлять ошибки, над которыми уже ведется работа, а также ошибки, не имеющие отношения к конкретному сценарию. При подавлении ошибки рекомендуется фиксировать рабочий элемент в журнале в Team Foundation.

Создание рабочего элемента для ошибки проверки

  • В окне Список ошибок щелкните правой кнопкой мыши ошибку, подведите указатель к команде Создать рабочий элемент, а затем щелкните тип рабочего элемента, который требуется создать.

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

Целевой тип

Выполните следующие действия

Подавить выбранные ошибки во время проверки

Щелкните одну или несколько выбранных ошибок правой кнопкой мыши и последовательно выберите Управление ошибками проверки и Подавление ошибок.

Отобразятся подавленные ошибки с форматированием в виде зачеркивания. При выполнении проверки в следующий раз эти ошибки отображаться не будут.

Подавленные ошибки отслеживаются в SUPPRESSIONS-файле, относящемся к соответствующему файлу схемы слоев.

Остановить подавление выбранных ошибок

Щелкните выбранную подавленную ошибку или ошибки правой кнопкой мыши и последовательно выберите Управление ошибками проверки и Отменить подавление ошибок.

При выполнении проверки в следующий раз выбранные подавленные ошибки будут отображаться.

Восстановить все подавленные ошибки в окне Список ошибок.

Щелкните правой кнопкой мыши в любом месте окна Список ошибок и последовательно выберите Управление ошибками проверки и Показать все подавленные ошибки.

Скрыть все подавленные ошибки в окне Список ошибок.

Щелкните правой кнопкой мыши в любом месте окна Список ошибок и последовательно выберите Управление ошибками проверки и Скрыть все подавленные ошибки.

Включение проверки слоев в процесс построения

Чтобы обеспечить соответствие будущих изменений кода схемам слоев, можно включить проверку слоев в стандартный процесс построения используемого решения. В этом случае всякий раз, когда другие члены команды выполняют построение решения, о любых различиях между зависимостями в коде и на схеме слоев будет сообщаться как об ошибках построения.

Проверка кода с использованием построения Team Foundation Build

  1. В Командном обозревателе дважды щелкните определение построения и выберите Обработать.

  2. В разделе Параметры процесса построения разверните блок Компиляция и в параметре Аргументы MSBuild введите следующее.

    /p:ValidateArchitecture=true

Дополнительные сведения см. в разделе Определение построения с помощью шаблона по умолчанию.

См. также

Задачи

Практическое руководство. Создание схем слоев из артефактов

Практическое руководство. Проверка кода .NET по схеме слоев

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

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