Модифікувати архітектуру раніше розробленого веб-додатка «Кінопошук» так, щоб доступ до бази даних здійснювався виключно через репозиторій, а не напряму через DbContext.
Це забезпечить слабку зв’язність (low coupling) між шарами додатка, дотримання принципу інверсії залежностей (DIP) та спростить тестування й підтримку коду.
-
Контролер не повинен працювати з
DbContextнапряму.
Він взаємодіє з даними тільки через сервіс. -
Сервіс:
- Має інтерфейс (існуючий інтерфейс сервісу не змінюємо).
- У конкретній реалізації сервісу використовується посилання на
IRepository.
-
Репозиторій:
- Створити інтерфейс
IRepository. - Створити конкретну реалізацію
Repository, яка працює зDbContext. - Усі операції з базою даних виконуються тільки всередині репозиторію.
- Створити інтерфейс
-
Dependency Injection:
- Зареєструвати
IRepository→Repositoryу контейнері залежностей. - Контролер отримує сервіс через конструктор (як і раніше).
- Сервіс отримує
IRepositoryчерез конструктор.
- Зареєструвати
Controller
↓ (залежить від інтерфейсу сервісу)
IService / Service
↓ (залежить від інтерфейсу репозиторію)
IRepository / Repository
↓
DbContext → База даних
- Контролер залишається тонким — відповідає лише за обробку HTTP-запитів.
- Бізнес-логіка та доступ до даних ізольовані в окремих шарах.
- Легке unit-тестування (можна підміняти
IRepositoryмоками). - Можливість замінити EF Core на іншу технологію доступу до даних без змін у контролері та сервісах.
- Дотримання принципів Clean Architecture та SOLID.
Рішення надіслати посиланням на GitHub у коментар до цього домашнього завдання на майстат.