Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created December 17, 2025 13:15
Show Gist options
  • Select an option

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

Select an option

Save sunmeat/e3f81d7524081ae8c2f102c7c05f622c to your computer and use it in GitHub Desktop.
ДЗ: музичний портал 2

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

Веб-сайт «Музичний портал»

Завдання

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

При цьому взаємодія контролера з сервісом Repository має відбуватися через абстракцію IRepository, щоб забезпечити слабку зв’язаність (low coupling) між класами.

Вимоги до валідації

  • Забезпечити валідацію моделі на стороні сервера.
  • Забезпечити валідацію на стороні клієнта.
  • Для керування процесом валідації використовувати атрибути валідації (Data Annotations).
  • Для відображення помилок валідації застосовувати тег-хелпери валідації (Validation Message, Validation Summary тощо).
  • Забезпечити стилізацію повідомлень про помилки (наприклад, за допомогою Bootstrap або власних CSS-классів).

Ключові аспекти реалізації

Аспект Опис
Шар доступу до даних Створити інтерфейс IRepository<T> та його реалізацію Repository<T>.
Впровадження залежностей Зареєструвати IRepository<T> у контейнері DI (Program.cs або Startup.cs).
Контролер Приймати залежність IRepository<T> через конструктор, а не DbContext безпосередньо.
Валідація моделі Додати атрибути [Required], [StringLength], [Range], [RegularExpression] тощо.
Серверна валідація Перевіряти ModelState.IsValid перед збереженням даних.
Клієнтська валідація Підключити jQuery Validation та unobtrusive validation.
Відображення помилок Використовувати <asp-validation-summary>, <asp-validation-for> та CSS-стилі.

Переваги запропонованої архітектури

  • Слабка зв’язаність — контролер залежить від абстракції, а не від конкретної реалізації.
  • Тестованість — легко підставляти mock-репозиторії під час юніт-тестування.
  • Підтримуваність — зміни в логіці доступу до даних не впливають на контролери.
  • Явна валідація — помилки видно користувачу відразу, покращується UX.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment