Какие принципы и паттерны учитываются при проектировании архитектуры, например чистая архитектура или луковая?
Что проверяют
Понимаете ли вы главную идею, которая объединяет все эти схемы, или помните только картинки с кругами. Следом обычно спрашивают, как это выглядит в вашем Python-проекте: где живёт ORM, как бизнес-логика получает репозиторий и что делать с Django.
Как отвечать
Чистая, луковая и гексагональная архитектура это вариации одного правила: зависимости направлены внутрь, к доменной логике, а она не знает про фреймворки, базу и HTTP. Различаются они в основном названиями слоёв.
- домен: сущности и правила на обычных классах или
dataclass, без импорта SQLAlchemy, FastAPI и Pydantic; - сценарии (use cases): оркестрация вроде «оформить заказ» или «списать баланс», работают только через интерфейсы;
- порты: интерфейсы, которые объявляет внутренний слой, в Python удобно через
typing.Protocolилиabc.ABC; - адаптеры: реализации портов, репозиторий на SQLAlchemy, клиент внешнего API, обработчики FastAPI.
Паттерны, которые здесь работают: Repository прячет хранилище, Unit of Work управляет транзакцией, внедрение зависимостей через конструктор или Depends в FastAPI собирает всё на краю приложения. Отдельно упомяните императивный маппинг SQLAlchemy: он сохраняет доменные классы в базу, не наследуя их от DeclarativeBase. SOLID стоит назвать как принципы, а не паттерны, и прежде всего DIP: на нём держится направление зависимостей.
Честно назовите цену: больше файлов и маппинга между слоями. Для CRUD-сервиса это избыточно, окупается там, где сложные правила и долгая жизнь проекта. В Django подход упирается в Active Record, поэтому там чаще выделяют сервисный слой, не отрывая модели от ORM полностью.
Где спотыкаются
Противопоставляют чистую и луковую архитектуру как разные подходы. Различия в основном терминологические, и попытка найти принципиальную разницу выдаёт знание по схемам.
Путают слои с папками. Каталоги domain и infrastructure есть, но доменная модель импортирует сессию SQLAlchemy, и правило зависимостей уже нарушено.
Применяют всё сразу к маленькому сервису: порты, адаптеры, DTO на каждый слой. Интервьюер спросит, окупилось ли это, и лучше заранее знать ответ.