Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created August 29, 2026 14:13
Show Gist options
  • Select an option

  • Save sunmeat/8e8a4ec791bf587224d9c34e58b98ae6 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/8e8a4ec791bf587224d9c34e58b98ae6 to your computer and use it in GitHub Desktop.
ДЗ на репозиторії

Впровадження залежностей в ASP.NET Core MVC. Репозиторії

Мета завдання

Модифікувати архітектуру раніше розробленого веб-додатка «Кінопошук» так, щоб доступ до бази даних здійснювався виключно через репозиторій, а не напряму через DbContext.

Це забезпечить слабку зв’язність (low coupling) між шарами додатка, дотримання принципу інверсії залежностей (DIP) та спростить тестування й підтримку коду.

Вимоги

  1. Контролер не повинен працювати з DbContext напряму.
    Він взаємодіє з даними тільки через сервіс.

  2. Сервіс:

    • Має інтерфейс (існуючий інтерфейс сервісу не змінюємо).
    • У конкретній реалізації сервісу використовується посилання на IRepository.
  3. Репозиторій:

    • Створити інтерфейс IRepository.
    • Створити конкретну реалізацію Repository, яка працює з DbContext.
    • Усі операції з базою даних виконуються тільки всередині репозиторію.
  4. Dependency Injection:

    • Зареєструвати IRepositoryRepository у контейнері залежностей.
    • Контролер отримує сервіс через конструктор (як і раніше).
    • Сервіс отримує IRepository через конструктор.

Архітектура після змін

Controller
    ↓ (залежить від інтерфейсу сервісу)
IService / Service
    ↓ (залежить від інтерфейсу репозиторію)
IRepository / Repository
    ↓
DbContext → База даних

Ключові переваги

  • Контролер залишається тонким — відповідає лише за обробку HTTP-запитів.
  • Бізнес-логіка та доступ до даних ізольовані в окремих шарах.
  • Легке unit-тестування (можна підміняти IRepository моками).
  • Можливість замінити EF Core на іншу технологію доступу до даних без змін у контролері та сервісах.
  • Дотримання принципів Clean Architecture та SOLID.

Здача роботи

Рішення надіслати посиланням на GitHub у коментар до цього домашнього завдання на майстат.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment