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


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

Можно описать архитектуры приложения на высоком уровне путем создания схем слоев в Visual Studio Ultimate.Чтобы убедиться, что код структуре с этой структурой, проверьте код со схемой слоев в Visual Studio Ultimate или Visual Studio Premium.Можно также включить проверку слоев в процесс построения.В Видео канала 9: Разработка и проверка свою архитектуру с использованием схем слоев разделе.

На схеме слоев?

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

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

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

ПримечаниеПримечание

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

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

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

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

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

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

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

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

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

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

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

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

Важное примечаниеВажно

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

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

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

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

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

СоветСовет

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

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

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

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

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

ПримечаниеПримечание

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

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

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

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

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

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

Целевой тип

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Dd418995.collapse_all(ru-ru,VS.110).gifСовершенствование структуры кода

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Проверять код по схеме

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

Пример

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

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

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

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

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

ПримечаниеПримечание

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

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

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

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

См. также

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

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

Создание схем слоев из кода