Вопрос проверяет знание архитектурных паттернов и понимание разделения бизнес-логики и работы с данными.
Repository — это паттерн, который выносит работу с хранилищем данных в отдельный слой. Бизнес-логика работает с репозиторием, а не напрямую с БД или ORM. Это упрощает тестирование и замену источника данных. Код становится чище и менее связным.
Repository помогает отделить «что мы делаем» от «как и где это хранится».
Repository pattern — архитектурный паттерн, который инкапсулирует доступ к данным и предоставляет коллекцию объектов через единый интерфейс.
Без репозитория:
бизнес-код зависит от ORM;
сложно менять БД;
трудно писать unit-тесты.
С репозиторием:
бизнес-логика работает через интерфейс;
детали хранения скрыты.
class UserRepository(ABC):
@abstractmethod
def get_by_id(self, user_id: int):
pass
Реализация через SQLAlchemy:
class SqlAlchemyUserRepository(UserRepository):
def get_by_id(self, user_id: int):
# ORM-запрос
...
Repository используют:
в DDD-подходах;
в сложных бизнес-доменах;
в проектах с долгим жизненным циклом.
Repository решает задачу изоляции бизнес-логики от слоя данных. Это делает код более устойчивым к изменениям и проще для тестирования.