2. Паттерн «Репозиторий» (стр. 53-73)
Проблема: как связать объекты модели с базой данных, не загрязняя модель кодом БД?
Нам нужно:
- Сохранять объекты в БД
- Извлекать объекты из БД
- Обновлять объекты
- Тестировать без реальной БД
Репозиторий — это посредник между моделью предметной области и слоем хранения данных.
Преимущества:
- Изоляция: модель не знает о БД
- Тестируемость: можно использовать FakeRepository
- Заменяемость: легко сменить БД без изменения модели
Что такое порт и что такое адаптер в Python
Порт — это абстрактный интерфейс (AbstractRepository).
Адаптер — это конкретная реализация (SqlAlchemyRepository, FakeRepository).
┌────────────────────────────────────┐
│ Модель предметной области │
├────────────────────────────────────┤
│ Порт (AbstractRepository) │
├──────────────────┬─────────────────┤
│ Адаптер │ Адаптер │
│ (SQLAlchemy) │ (Fake) │
└──────────────────┴─────────────────┘
Это называется гексагональная архитектура (порты и адаптеры).
