Каково отношение к чистой архитектуре Боба Мартина
Что проверяют
Это вопрос на мнение, и выученного определения здесь мало. Интервьюеру важно, умеете ли вы взвешивать архитектурные решения и видите ли их цену. Следом обычно спрашивают, где бы вы от чистой архитектуры отказались и как она ложится на Django или FastAPI.
Как отвечать
Коротко покажите, что знаете суть. Код делится на концентрические слои:
- сущности: бизнес-правила предметной области, в Python это обычные
dataclassбез импорта фреймворков; - сценарии (use cases): операции приложения вроде «оформить заказ», зависят только от абстракций;
- адаптеры: репозиторий на SQLAlchemy, обработчики FastAPI, клиенты внешних API;
- фреймворки и драйверы: сама база, веб-сервер, брокер.
Главное здесь правило зависимостей: импорты направлены только внутрь. Сценарий объявляет порт, например class OrderRepo(Protocol) из typing, а реализация лежит снаружи и подставляется через Depends в FastAPI или контейнер вроде dependency-injector. Хороший ориентир для питониста книга «Architecture Patterns with Python»: там репозиторий, Unit of Work и сервисный слой разобраны именно на этом стеке.
Потом выскажите мнение с условиями. Польза в том, что бизнес-логика тестируется без базы и HTTP, а у одного сценария может быть несколько входов: API, CLI, воркер Celery. Цена тоже реальна: три описания одной сущности (ORM-модель, доменный объект, схема Pydantic) и слой маппинга между ними. В Django с его моделями в стиле Active Record такая архитектура идёт против фреймворка. Честная позиция звучит так: для сложного домена и долгого проекта беру, для CRUD-сервиса и прототипа нет. Подкрепите её своим проектом и тем, что получилось на практике.
Где спотыкаются
Отвечают как фанат или как противник, без условий. Категоричная позиция в вопросе о мнении звучит слабо.
Путают слои с папками. Каталоги domain и infrastructure ничего не дают, если модуль в domain импортирует sqlalchemy.
Главным плюсом называют «легко сменим базу». Это случается редко, и интервьюер это знает. Убедительнее говорить про тестируемость и изоляцию логики от фреймворка.