Модифікувати архітектуру веб-додатка «Музичний портал» таким чином, щоб контролер взаємодіяв з базою даних через сервіс 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.