Как чистая архитектура влияет на время разработки и внедрения фич?
Что проверяют
Понимаете ли вы, что чистая архитектура не ускоряет всё и сразу, а перераспределяет затраты: дороже в начале, дешевле на длинной дистанции. Интервьюер ждёт честного разговора о цене. Следом часто спрашивают, стали бы вы применять её в небольшом CRUD-сервисе на FastAPI или Django.
Как отвечать
Коротко обозначьте идею: зависимости направлены внутрь, бизнес-правила не знают о фреймворке, базе и HTTP. В Python это обычно выглядит так:
- сущности и сценарии: доменные классы на
dataclassи use cases, которые вызываются без FastAPI и без базы; - порты: интерфейсы репозиториев через
typing.Protocolилиabc.ABC, реализация на SQLAlchemy живёт снаружи; - Unit of Work: транзакция как отдельная абстракция, чтобы сценарий не держал в руках сессию;
- сборка: зависимости подставляются на краю, например через
Dependsв FastAPI или контейнер вродеdependency-injector; - контроль границ:
import-linterв CI не даёт домену импортировать инфраструктуру.
Теперь про время. Первая фича выходит медленнее: сущность, DTO, маппинг из ORM-модели и обратно, порт, адаптер. На сервисе с тремя эндпоинтами это чистые накладные расходы. Выигрыш приходит позже: доменные тесты проходят за секунды без базы, замена внешнего API или хранилища не расползается по коду, новый человек находит бизнес-логику в одном месте. Отдельно скажите про Django: его ORM построен по Active Record, и попытка спрятать модели за репозиториями часто даёт больше кода, чем пользы. Хорошая книга на эту тему: «Architecture Patterns with Python», она же Cosmic Python.
Где спотыкаются
Утверждают, что чистая архитектура всегда сокращает время разработки. Без оговорки про стартовые затраты и размер проекта это звучит как пересказ статьи.
Путают архитектуру с раскладкой по папкам. Каталоги domain и infrastructure не помогают, если сценарий напрямую импортирует модели SQLAlchemy.
Протаскивают ORM-модели и схемы Pydantic в доменный слой. Тогда любое изменение таблицы или API снова задевает бизнес-логику, и за слои вы платите зря.