Logo Craft Homelab Docs Контакты Telegram

2. Паттерн «Репозиторий» (стр. 53-73)

Проблема: как связать объекты модели с базой данных, не загрязняя модель кодом БД?

Нам нужно:

  1. Сохранять объекты в БД
  2. Извлекать объекты из БД
  3. Обновлять объекты
  4. Тестировать без реальной БД

Репозиторий — это посредник между моделью предметной области и слоем хранения данных.

Преимущества:

  1. Изоляция: модель не знает о БД
  2. Тестируемость: можно использовать FakeRepository
  3. Заменяемость: легко сменить БД без изменения модели

Что такое порт и что такое адаптер в Python

Порт — это абстрактный интерфейс (AbstractRepository).

Адаптер — это конкретная реализация (SqlAlchemyRepository, FakeRepository).

┌────────────────────────────────────┐
│      Модель предметной области     │
├────────────────────────────────────┤
│      Порт (AbstractRepository)     │
├──────────────────┬─────────────────┤
│   Адаптер        │     Адаптер     │
│   (SQLAlchemy)   │     (Fake)      │
└──────────────────┴─────────────────┘

Это называется гексагональная архитектура (порты и адаптеры).