Построить веб-приложение, поддерживающую заданную функциональность:
- На основе сущностей предметной области создать классы их описывающие, соблюдая принципы SOLID. (DI по желанию).
- Классы и методы должны иметь отражающую их функциональность названия и должны быть грамотно структурированы в приложении (folders, namespaces).
- Оформление кода должно соответствовать C# Code Conventions.
- Информацию о предметной области хранить в БД, для доступа использовать Entity Framework. В качестве СУБД использовать MS SQL (не Compact).
- Архитектура приложения должна соответствовать шаблону MVC.
- Выполнить журналирование событий, то есть информацию о возникающих исключениях и событиях в системе обрабатывать средствами среды.
- Код должен содержать комментарии (все классы верхнего уровня, нетривиальные методы и конструкторы).
- Уровень доступа к данным должен быть вынесен в отдельный проект.
- Реализовать разграничение прав доступа пользователей системы к компонентам приложения (минимум 3 роли).
- Все поля ввода должны быть с валидацией данных.
Дополнительно, к требованиям изложенным выше, более чем желательно обеспечить выполнение следующих требований.
- покрытие юнит-тестами бизнес-логики.
- Использовать журналирование событий.
- Обработка исключений.
- Самостоятельное расширение постановки задачи по функциональности приветствуется.
Библиотека Читатель регистрируется в системе и далее имеет возможность осуществлять поиск (по автору/названию) и заказ Книг в Каталоге. Незарегистрированный Читатель не может заказать книгу. Для каталога реализовать возможность сортировки книг:
по названию; по автору; по изданию; по дате издания. Библиотекарь выдает читателю книгу на абонемент или в читальный зал. Книга выдается Читателю на определенный срок. При не возврате книги в срок, читателю начисляется штраф.
Книга может присутствовать в библиотеке в одном или нескольких экземплярах. Система ведет учет доступного количества книг.
Каждый пользователь имеет личный кабинет, в котором отображается регистрационная информация, а также
для читателя:
список книг, которые находятся на абонементе и дата предполагаемого возвращения (если дата просрочена, отображается размер штрафа); для библиотекаря:
список заказов читателей. Администратор системы владеет правами:
добавления/удаления книги, редактирования информации о книге; создания/удаления библиотекаря; блокирования/разблокирования пользователя.