Есть три способа заставить команду придерживаться дизайна:
- компилятор и статический анализ
- архитектурные тесты
- код-ревью
Компилятор - лучший друг. Он мгновенно ловит ошибки и не даст собрать проект, если что-то нарушено.
Но как использовать это для защиты архитектуры?
В .NET можно скрывать типы через
internal и разделять код на проекты, чтобы изолировать модули. Проблема - при масштабировании проектов становится слишком много.
Статический анализ полезен, но писать свои Roslyn-правила - удовольствие на любителя.
Поэтому я делаю ставку на архитектурные тесты.
Они позволяют задать правила в виде автотестов и контролировать зависимости между модулями, особенно в модульном монолите: каждый модуль видит только публичный API других модулей.
Ну и код-ревью - финальный фильтр. Кто-то должен глазами подтвердить, что всё ок.
Что выбрать?
Я больше всего полагаюсь на компилятор и архитектурные тесты - это помогает ловить проблемы максимально рано.
Хотите больше? Посмотрите пример использования архитектурных тестов и подход shift left.
