Схемы слоев: рекомендации
Можно описать архитектуру приложений на высоком уровне путем создания схем слоев в Visual Studio Ultimate. Чтобы убедиться, что код соответствует данной структуре, проверьте код с помощью схемы слоев в Visual Studio Ultimate или Visual Studio Premium. В процесс сборки также можно включить проверку слоев. См. Канал 9. Использование схем слоев для проектирования и проверки архитектуры.
Что такое схема слоев?
Как и в традиционной схеме архитектуры, схема слоев определяет основные компоненты или функциональные единицы разработки, а также их взаимозависимости. Каждый узел в схеме, который называется слой, представляет собой логическую группу пространств имен, проектов или их артефактов. Можно нарисовать зависимости для своей разработки. В отличие от традиционной схемы архитектуры, можно проверить, соответствуют ли действительные зависимости заданным вами предполагаемым зависимостям. Делая проверку частью стандартного построения в Team Foundation Server, можно добиться того, чтобы программный код продолжал придерживаться архитектуры системы при дальнейших изменениях. См. раздел Схемы слоев: справочные материалы.
Разработка или обновление приложения с использованием схем слоев
Следующие шаги показывают как использовать схемы слоев при разработке. Каждый шаг более подробно описан в последующих подразделах данного раздела. Если ведется разработка нового проекта, можно пропустить шаги, которые относятся к существующему коду.
Примечание
Эти шаги приведены в примерном порядке.Возможно, понадобится перекрыть задачи, заново упорядочить их, чтобы они подходили по ситуации, а также возвратиться к ним в начале каждой итерации в проекте.
Создайте схемы уровней для всего приложения или для слоя внутри него.
Определите уровни для представления первичных функциональных областей или компонентов вашего приложения. Дайте этим слоям имена согласно их функциям, например "Презентация" или "Службы". Если у вас есть решение Visual Studio, то можно связать каждый слой с коллекцией артефактов, таких как проекты, пространства имен, файлы и т. д.
Обнаружение существующих зависимостей между слоями.
Редактирование слоев и зависимостей для отображения обновленной разработки, соответствующей необходимому коду.
Спроектируйте новые области приложения путем создания слоев, представляющих принципиальные архитектурные блоки или компоненты, а также путем определения зависимостей для отображения того, как каждый слой использует другие.
Редактируйте разметку и вид схемы , чтобы обсудить ее с коллегами.
Проверьте код схемы слоя, чтобы выделить конфликты между кодом и требуемой архитектурой.
Обновите код для того, чтобы он соответствовал новой архитектуре. Итерационно разрабатывайте и оптимизируйте код до тех пор, пока проверка не укажет, что конфликты отсутствуют.
Включите проверку слоев в процессе построения, чтобы убедиться, что код соответствует вашему проекту.
Создание схемы слоев
Схема слоев должна создаваться внутри проекта моделирования. Можно добавить новую схему слоя в существующий проект моделирования, создайте новый проект моделирования для схемы слоя или скопируйте схему слоя в том же проекте моделирования.
Важно!
Не следует добавлять, перетаскивать или копировать существующую схему слоев из одного проекта моделирования в другой или в другое местоположение в решении.Скопированные таким образом схемы слоев содержат те же ссылки, что и исходная схема, даже если вы ее измените.Это может привести к тому, что проверка схемы будет работать неправильно, а также к другим потенциальным проблемам, таким как отсутствующие элементы или другие ошибки при попытке открыть схему.
См. раздел Создание схем слоев из кода.
Определение уровней для представления функциональных областей или компонентов
Слои представляют собой логические группы артефактов, таких как проекты, файлы кода, пространства имен, классы и методы. Можно создать слои из артефактов из проектов Visual C# .NET и Visual Basic .NET, или же можно привязать спецификации или планы к слою путем связывания документов, таких как файлы Word или презентации PowerPoint. Каждый слой представляет собой прямоугольник на схеме и показывает количество артефактов, связанных с ним. Слой может содержать вложенные слои, описывающие более конкретные задачи.
Рекомендуется называть слои согласно их функциям, например "Презентация" или "Службы". Если артефакты тесно взаимосвязаны, поместите их в один слой. Если артефакты могут быть обновлены отдельно или использованы в разных приложениях, поместите их на разные слои. Для получения дополнительной информации о шаблонах слоев посетите сайт Шаблоны и Приемы по ссылке https://go.microsoft.com/fwlink/?LinkId=145794.
Совет
Существуют некоторые типы артефактов, которые можно связать со слоями, но при этом поддержки проверки схемы слоев не будет.Чтобы узнать, позволяет ли артефакт проводить проверку, откройте Обозреватель слоев и просмотрите свойство Поддерживает проверку связи артефакта.См. Обнаружение существующих зависимостей между слоями.
При обновлении незнакомого приложения можно использовать графики зависимостей, чтобы облегчить просмотр и разбор кода. Эти графики помогают найти в коде кластеры и зависимости. Также можно воспользоваться обозревателем архитектуры, чтобы изучить пространства имен и классы, которые часто находятся в точном соответствии с существующими слоями. Это облегчит назначение артефактов слоям. Затем схемы слоев можно использовать для обновления кода.
Дополнительные сведения см. в следующих разделах:
Обнаружение существующих зависимостей между слоями
Зависимости существуют там, где артефакт, связанный с одним слоем, ссылается на артефакт, связанный с другим слоем. Например, класс в одном слое объявляет переменную, которая имеет класс в другом слое. Существующие зависимости можно обнаружить путем их реконструирования.
Примечание
Для определенных видов артефактов реконструировать зависимости невозможно.Например, зависимости не могут быть реконструированы из или в слой, связанный с текстовым файлом.Чтобы увидеть, какие артефакты имеют зависимости, которые можно реконструировать, щелкните правой кнопкой мыши на одном или нескольких слоях и выберите Просмотр ссылок.В Обозревателе слоев просмотрите столбец Поддержка проверки.Зависимости не будут реконструированы для артефактов, для которых в данном столбце указано значение False.
Чтобы выполнить реконструирование существующих зависимостей между слоями
- Выделите один или несколько слоев, щелкните правой кнопкой мыши на выбранном слое и выберите Сформировать зависимости.
Как правило, на этом этапе можно увидеть некоторые зависимости, которых быть не должно. Эти зависимости можно изменить для соответствия предполагаемой структуре.
Изменение слоев и зависимостей для отображения предполагаемой структуры
Чтобы описать изменения, которые планируется внести в систему или предполагаемую архитектуру, осуществите следующие шаги для изменения схемы слоев. Можно также сделать некоторые оптимизационные изменения для улучшения структуры кода перед его расширением. См. Совершенствование структуры кода.
Целевой тип |
Выполните следующие действия |
---|---|
Удаление зависимости, которой не должно существовать |
Выделите зависимость и нажмите клавишу DELETE. |
Изменить или ограничить направление зависимости |
Задайте значение для свойства Направление. |
Создать новые зависимости |
Используйте средства Зависимость и Двунаправленная зависимость. Чтобы нарисовать несколько зависимостей, дважды щелкните средство. По завершении выберите средство Указатель или нажмите клавишу ESC. |
Указание, что артефакт, связанный со слоем, не может зависеть от указанного пространства имен |
Введите пространства имен в свойстве слоя Запрещенные зависимости пространства имен. Для разделения пространств имен используйте точку с запятой (;). |
Указание, что артефакт, связанный со слоем, не должен более принадлежать указанному пространству имен |
Введите пространства имен в свойстве слоя Запрещенные пространства имен. Для разделения пространств имен используйте точку с запятой (;). |
Указание, что артефакт, связанный со слоем, должен принадлежать одному из указанных пространств имен |
Введите пространство имен в свойстве слоя Обязательные пространства имен. Для разделения пространств имен используйте точку с запятой (;). |
Совершенствование структуры кода
Оптимизация изменений — это улучшения, которые не влияют на поведение приложения, но помогают сделать код более легким для изменения или расширения в будущем. Хорошо структурированный код имеет такой вид, который потом легко можно поместить в схему слоев.
Например, если создается слой для каждого пространства имен в коде и затем разбираются зависимости, то необходимо, чтобы был минимальный набор односторонних зависимостей между слоями. Если создается более детальная схема с использованием классов или методов в качестве слоев, то результат должен иметь такие же характеристики.
Если это не так, то код будет более сложным для изменения в течение всего времени и менее подходящим для проверки с использованием схем слоев.
Разработка новых областей приложения
При начале разработки нового проекта или новой области в новом проекте, можно нарисовать слои и зависимости, чтобы облегчить определение основных компонентов перед началом разработки кода.
Отобразите определяемые архитектурные шаблоны в схемах слоев, если возможно. Например, схема слоев, которая описывает настольное приложение, может включать такие слои, как "Презентация", "Доменная логика" и "Хранилище данных". Схема слоев, которая относится к одному компоненту приложения, может иметь такие слои, как "Модель", "Вид" и "Контроллер". Дополнительные сведения о таких шаблонах, см. в разделе Шаблоны и Примеры: Архитектура приложения.
Если вы часто создаете похожие шаблоны, то можно создать пользовательский инструмент. См. раздел Практическое руководство. Определение настраиваемого элемента панели элементов моделирования.
Создайте артефакт кода для каждого слоя , такой как пространство имен, класс или компонент. Это облегчит отслеживание кода и поможет связывать артефакты кода со слоями. Сразу после создания артефакта свяжите его с соответствующим слоем.
Нет необходимости связывать большинство классов и другие артефакты со слоями, так как они находятся в диапазоне более крупных артефактов, таких как пространство имен, которые вы уже связали со слоями.
Создание новой схемы для новой функции. Обычно будет создана одна или несколько схем слоев, описывающих все приложение. Если вы разрабатываете новую функцию в приложении, то не добавляйте и не изменяйте существующие схемы. Вместо этого создайте свою схему, которая отражает новые части кода. Слои в новой схеме могут включать в себя презентацию, доменную логику и слои базы данных для новой функции.
При построении приложения код будет проверяться как в отношении всей схемы , так и в отношении более детальной схемы функции.
Изменение макета для представления и обсуждения
Чтобы облегчить определение слоев и зависимостей или обсудить их с членами команды, измените вид и разметку схемы следующим образом.
Измените размеры, формы и положение слоев.
Измените цвета слоев и зависимостей.
- Выберите один или несколько слоев или зависимостей, щелкните правой кнопкой, затем выберите Свойства. В окне Свойства измените свойство Цвет.
Проверка кода по схеме
После изменения схемы можно проверить код вручную в любое время или автоматически при каждом запуске локального построения или Team Foundation Build.
Пример
Включение проверки слоев в процесс построения
Обновление кода для обеспечения соответствия новой архитектуре
Обычно ошибки появляются при первой проверке кода в обновленной схеме слоя. Ошибки могут возникать вследствие нескольких причин.
Артефакт назначен неправильному слою. В этом случае следует переместить артефакт.
Способ использования артефактом (например, классом) другого класса конфликтует с имеющейся архитектурой. В этом случае необходимо выполнить рефакторинг кода, чтобы устранить зависимость.
Для устранения этих ошибок следует обновлять код до тех пор, пока в процессе проверки не перестанут происходить ошибки. Обычно это итерационный процесс. Дополнительные сведения об ошибках см. в разделе Проверка кода по схеме слоев.
Примечание
Возможно, во время разработки или оптимизации кода понадобится связать новые артефакты со схемой слоев.Однако это может не потребоваться, например, когда слои представляют собой существующие пространства имен, а новый код только добавляет больше материала для них.
В процессе разработки может понадобиться подавить некоторые конфликты, выявленные в ходе проверки. Например, можно подавлять ошибки, над которыми уже ведется работа, а также ошибки, не имеющие отношения к конкретному сценарию. При подавлении ошибки рекомендуется фиксировать рабочий элемент в журнале в Team Foundation. Для выполнения этой задачи см. раздел Проверка кода по схеме слоев.
Включение проверки слоев в процесс построения
Чтобы убедиться, что будущие изменения в коде соответствуют схеме слоев, включите проверку слоев в стандартный процесс построения решения. Всякий раз, когда другая команда начинает построение решения, любые изменения между зависимостями в коде и в схеме слоев будут отображаться как ошибки построения. Дополнительную информацию о включении проверки слоев в процесс построения см. в разделе Проверка кода по схеме слоев.