Даже продуманная архитектура постепенно разрушается, если её границы легко нарушить. Дедлайны, недопонимание и случайные зависимости превращают аккуратную структуру в запутанный код.
В .NET закрепить правила помогают три подхода.
• Компилятор и статический анализ: Модификатор
internal скрывает типы от других сборок, а отдельные проекты позволяют ограничивать зависимости между частями приложения. Нарушение доступности обнаружится уже при сборке.Дополнительные ограничения можно выразить через анализаторы Roslyn. Но дробить приложение на множество проектов или писать собственный анализатор для каждого правила не всегда удобно.
• Архитектурные тесты: Позволяют описать правила проектирования как автоматические проверки. Например:
• Доменный слой не зависит от инфраструктуры.
• Контроллеры не обращаются к базе напрямую.
• Модули взаимодействуют только через публичные API.
Запускаете такие тесты в CI — и обнаруживаете нарушения до слияния изменений.
• Код-ревью с помощью AI: Автоматические проверки дополняются оценкой разработчика: насколько решение соответствует задаче, оправданы ли зависимости и усложнения. AI может ускорить поиск проблем, но архитектурные решения всё равно требуют осмысленного ревью.
Архитектурные тесты превращают договорённости команды в проверяемые ограничения. Это особенно полезно, когда код быстро появляется в больших объёмах, в том числе с помощью AI.
Подробнее об архитектурном тестировании
👉 @KodBlog
