Схемы зависимостей: рекомендации
Опишите архитектуру приложения на высоком уровне, создав схемы зависимостей в Visual Studio. Убедитесь, что код остается в соответствии с этим проектом, проверяя код с помощью схемы зависимостей. В процесс сборки также можно включить проверку слоев.
Чтобы узнать, какие выпуски Visual Studio поддерживают эту функцию, см. раздел Поддержка инструментов моделирования и архитектуры в различных выпусках.
Примечание.
Схемы зависимостей для проектов .NET Core поддерживаются начиная с Visual Studio 2019 версии 16.2.
Что такое схема зависимостей?
Как и традиционная схема архитектуры, схема зависимостей определяет основные компоненты или функциональные единицы проектирования и их взаимозависимости. Каждый узел на схеме, называемый слоем, представляет логическую группу пространств имен, проектов или других артефактов. Можно нарисовать зависимости для своей разработки. В отличие от традиционной схемы архитектуры, можно проверить, соответствуют ли действительные зависимости заданным вами предполагаемым зависимостям. Сделав проверку частью регулярной сборки на Team Foundation Server, вы можете убедиться, что код программы продолжает придерживаться архитектуры системы с помощью будущих изменений. См . диаграммы зависимостей: справочник.
Проектирование или обновление приложения с помощью схем зависимостей
Ниже приведен обзор использования схем зависимостей в процессе разработки. Каждый шаг более подробно описан в последующих подразделах данного раздела. Если ведется разработка нового проекта, можно пропустить шаги, которые относятся к существующему коду.
Примечание.
Эти шаги приведены в примерном порядке. Возможно, понадобится перекрыть задачи, заново упорядочить их, чтобы они подходили по ситуации, а также возвратиться к ним в начале каждой итерации в проекте.
Создайте схему зависимостей для всего приложения или слоя внутри него.
Определите слои для представления основных функциональных областей или компонентов приложения. Дайте этим слоям имена согласно их функциям, например "Презентация" или "Службы". Если у вас есть решение Visual Studio, вы можете связать каждый слой с коллекцией артефактов, таких как проекты, пространства имен, файлы и т. д.
Измените слои и зависимости , чтобы отобразить обновленный дизайн, который требуется отразить в коде.
Создавайте новые области приложения , создавая слои для представления основных архитектурных блоков или компонентов и определения зависимостей, чтобы показать, как каждый слой использует другие.
Измените макет и внешний вид схемы , чтобы обсудить его с коллегами.
Проверьте код на схеме зависимостей , чтобы выделить конфликты между кодом и необходимой архитектурой.
Обновите код, чтобы соответствовать новой архитектуре. Итерационно разрабатывайте и оптимизируйте код до тех пор, пока проверка не укажет, что конфликты отсутствуют.
Включите проверку слоя в процесс сборки, чтобы убедиться, что код продолжает соответствовать проектированию.
Создание схемы зависимостей
В проекте моделирования необходимо создать схему зависимостей. Вы можете добавить новую схему зависимостей в существующий проект моделирования, создать новый проект моделирования для схемы зависимостей или скопировать существующую схему зависимостей в одном проекте моделирования.
Важно!
Не добавляйте, перетаскивайте или копируйте существующую схему зависимостей из проекта моделирования в другой проект моделирования или в другое расположение в решении. Схема зависимостей, скопированная таким образом, будет иметь те же ссылки, что и исходная схема, даже если изменить схему. Это может привести к тому, что проверка схемы будет работать неправильно, а также к другим потенциальным проблемам, таким как отсутствующие элементы или другие ошибки при попытке открыть схему.
См. статью "Создание схем зависимостей" из кода.
Определение слоев для представления функциональных областей или компонентов
Слои представляют логические группы артефактов, такие как проекты, файлы кода, пространства имен, классы и методы. Вы можете создавать слои из артефактов из проектов Visual C# и Visual Basic, а также присоединять спецификации или планы к уровню, связывая документы, такие как файлы Word или презентации PowerPoint. Каждый слой представляет собой прямоугольник на схеме и показывает количество артефактов, связанных с ним. Слой может содержать вложенные слои, описывающие более конкретные задачи.
Рекомендуется называть слои согласно их функциям, например "Презентация" или "Службы". Если артефакты тесно взаимосвязаны, поместите их в один слой. Если артефакты могут быть обновлены отдельно или использованы в разных приложениях, поместите их на разные слои.
Совет
Существуют определенные типы артефактов, которые можно связать с слоями, но не поддерживают проверку на схеме зависимостей. Чтобы узнать, поддерживает ли артефакт проверку, откройте слой Обозреватель для проверки свойства "Поддержка проверки" ссылки артефакта. См. статью "Обнаружение существующих зависимостей между слоями".
При обновлении незнакомого приложения можно также создать карты кода. Они помогают обнаружить закономерности и зависимости при анализе кода. Воспользуйтесь обозревателем решений, чтобы изучить пространства имен и классы, которые часто находятся в точном соответствии с существующими слоями. Назначьте эти артефакты кода слоям, перетащив их из Обозреватель решений на схемы зависимостей. Затем можно использовать схемы зависимостей для обновления кода и поддержания его согласованности с проектом.
См.
Обнаружение существующих зависимостей между слоями
Зависимости существуют там, где артефакт, связанный с одним слоем, ссылается на артефакт, связанный с другим слоем. Например, класс в одном слое объявляет переменную, которая имеет класс в другом слое. Существующие зависимости можно обнаружить путем их реконструирования.
Примечание.
Для определенных видов артефактов реконструировать зависимости невозможно. Например, зависимости не могут быть реконструированы из или в слой, связанный с текстовым файлом. Чтобы узнать, какие артефакты имеют зависимости, которые можно выполнить реверсивным инженером, щелкните правой кнопкой мыши один или несколько слоев, а затем щелкните "Просмотреть ссылки". В Обозреватель уровня проверьте столбец "Поддержка проверки". Зависимости не будут перепроектированы для артефактов, для которых в этом столбце отображается значение False.
Чтобы выполнить реконструирование существующих зависимостей между слоями
Выберите один слой или несколько слоев, щелкните правой кнопкой мыши выбранный слой и нажмите кнопку "Создать зависимости".
Как правило, на этом этапе можно увидеть некоторые зависимости, которых быть не должно. Эти зависимости можно изменить для соответствия предполагаемой структуре.
Изменение слоев и зависимостей для отображения предполагаемой структуры
Чтобы описать изменения, которые планируется внести в систему или предназначенную архитектуру, выполните следующие действия, чтобы изменить схему зависимостей. Можно также сделать некоторые оптимизационные изменения для улучшения структуры кода перед его расширением. См. статью "Улучшение структуры кода".
Кому | Выполните следующие действия. |
---|---|
Удаление зависимости, которой не должно существовать | Щелкните зависимость и нажмите клавишу DELETE. |
Изменить или ограничить направление зависимости | Задайте свойство Direction . |
Создать новые зависимости | Используйте средства зависимостей и двунаправленных зависимостей. Чтобы нарисовать несколько зависимостей, дважды щелкните средство. По завершении щелкните средство указателя или нажмите клавишу ESC . |
Указание, что артефакт, связанный со слоем, не может зависеть от указанного пространства имен | Введите пространства имен в свойстве зависимостей запрещенного пространства имен слоя. Используйте точку с запятой (;), чтобы разделить пространства имен. |
Указание, что артефакт, связанный со слоем, не должен более принадлежать указанному пространству имен | Введите пространства имен в свойстве запрещенных пространств имен слоя. Используйте точку с запятой (;), чтобы разделить пространства имен. |
Указание, что артефакт, связанный со слоем, должен принадлежать одному из указанных пространств имен | Введите пространство имен в свойстве обязательных пространств имен слоя. Используйте точку с запятой (;), чтобы разделить пространства имен. |
Улучшение структуры кода
Оптимизация изменений — это улучшения, которые не влияют на поведение приложения, но помогают сделать код более легким для изменения или расширения в будущем. Хорошо структурированный код имеет структуру, которая легко абстрагироваться на схему зависимостей.
Например, если создается слой для каждого пространства имен в коде и затем разбираются зависимости, то необходимо, чтобы был минимальный набор односторонних зависимостей между слоями. Если создается более детальная схема с использованием классов или методов в качестве слоев, то результат должен иметь такие же характеристики.
Если это не так, код будет труднее измениться на протяжении всей своей жизни и будет менее подходящим для проверки с помощью схем зависимостей.
Разработка новых областей приложения
При начале разработки нового проекта или новой области в новом проекте, можно нарисовать слои и зависимости, чтобы облегчить определение основных компонентов перед началом разработки кода.
Если это возможно, отобразимые архитектурные шаблоны в схемах зависимостей. Например, схема зависимостей, описывающая классическое приложение, может включать такие уровни, как презентация, логика домена и хранилище данных. Схема зависимостей, которая охватывает одну функцию в приложении, может иметь такие уровни, как модель, представление и контроллер.
Создайте артефакт кода для каждого слоя , например пространства имен, класса или компонента. Это облегчит отслеживание кода и поможет связывать артефакты кода со слоями. Сразу после создания артефакта свяжите его с соответствующим слоем.
Вам не нужно связывать большинство классов и других артефактов с слоями , так как они попадают в более крупные артефакты, такие как пространства имен, которые уже связаны с слоями.
Создайте схему для новой функции. Как правило, существует одна или несколько схем зависимостей, описывающих все приложение. Если вы разрабатываете новую возможность в приложении, то не добавляйте и не изменяйте существующие схемы. Вместо этого создайте свою схему, которая отражает новые части кода. Слои в новой схеме могут включать в себя презентацию, доменную логику и слои базы данных для новой возможности.
При построении приложения код будет проверяться как в отношении всей схемы , так и в отношении более детальной схемы возможности.
Изменение макета для презентации и обсуждения
Чтобы облегчить определение слоев и зависимостей или обсудить их с членами команды, измените вид и разметку схемы следующим образом.
Измените размеры, формы и положение слоев.
Измените цвета слоев и зависимостей.
- Выберите один или несколько слоев или зависимостей, щелкните правой кнопкой мыши и выберите пункт "Свойства". В окне "Свойства" измените свойство Color.
Проверка кода на схеме
Когда вы редактировали схему, его можно проверить вручную в любое время или автоматически при каждой сборке.
См.
Обновление кода для соответствия новой архитектуре
Как правило, ошибки будут отображаться при первом проверке кода на обновленной схеме зависимостей. Ошибки могут возникать вследствие нескольких причин.
Артефакт назначен неправильному слою. В этом случае следует переместить артефакт.
Способ использования артефактом (например, классом) другого класса конфликтует с имеющейся архитектурой. В этом случае необходимо выполнить рефакторинг кода, чтобы устранить зависимость.
Для устранения этих ошибок следует обновлять код до тех пор, пока в процессе проверки не перестанут происходить ошибки. Обычно это итерационный процесс. Дополнительные сведения об этих ошибках см. в разделе "Проверка кода с помощью схем зависимостей".
Примечание.
При разработке или рефакторинге кода могут быть новые артефакты, которые можно связать с схемой зависимостей. Однако это может не потребоваться, например, когда слои представляют собой существующие пространства имен, а новый код только добавляет больше материала для них.
В процессе разработки может понадобиться подавить некоторые конфликты, выявленные в ходе проверки. Например, можно подавлять ошибки, над которыми уже ведется работа, а также ошибки, не имеющие отношения к конкретному сценарию. При подавлении ошибки рекомендуется регистрировать рабочий элемент в Team Foundation. Сведения о выполнении этой задачи см. в разделе "Проверка кода с помощью схем зависимостей".
Включение проверки уровня в процесс сборки
Чтобы гарантировать, что будущие изменения в коде соответствуют схемам зависимостей, включите проверку уровня в стандартный процесс сборки решения. Всякий раз, когда другие члены команды создают решение, все различия между зависимостями в коде и схемой зависимостей будут сообщаться как ошибки сборки. Дополнительные сведения о том, как включить проверку слоя в процесс сборки, см. в разделе "Проверка кода с помощью схем зависимостей".