-
Notifications
You must be signed in to change notification settings - Fork 0
Отчет
Магазин по продаже книг.
Для покупателя:
- Регистрация и авторизация в системе.
- Покупка книг.
- Поиск книг по различным признакам.
- Получение дополнительной информации о книге у внешнего сервиса по ISBN.
Для администратора:
- Добавление новых книг в каталог.
- Добавление новых издателей.
- Модификация уже существующих книг.
- Модификация уже существующих издателей.
Для внешнего сервиса
- Получение количества проданных книг по ее ISBN.
-
Регистрация
- Пользователь вводит регистрационную информацию (логин и пароль).
- Если логин еще не зарегистрирован, то регистрация проходит успешно, иначе пользователю предлагается ввести другой логин.
-
Покупка книги
- Пользователь авторизуется.
- Пользователь ищет необходмую книгу в каталоге.
- Если книга успешно найдена, то при нажатии на кнопку "купить" книга помещается в корзину.
- При необходимости пользователь может добавить в корзину несколько книг.
-
Получение данных с внешнего сервиса
- При покупке книги, пользователь, нажав на соответствующую кнопку, может получить дополнительную информацию о книге с внешнего сервиса.
-
Получение статистики продаж
- Пользователь отправляет запрос, содержащий ISBN книги.
- Если книга с таким ISBN существует, то выводится количество проданных книг.
- Альтернатива: Если книга не найдена, то выводится сообщение об ошибке.
-
Управление каталогом книг
- Администратор авторизуется.
- При успешной авторизации, администратор может выполнить следующие действия: добавить новую книгу или изменить уже существующую.
-
Управление списком издателей
- Администратор авторизуется.
- При успешной авторизации, администратор может выполнить следующие действия: добавить нового издателя или изменить уже существующего.
В качестве паттерна для реализации бизнес-логики было решено выбрать шаблон Domain Model (модель области определения), так как он лучше всего подходит для отображения объектно-ориентированной модели приложения. Однако, паттерн обладает несколькими недостатками (сложность взаимодействия с БД, сложность реализации), которые необходимо учитывать при разработке.
Разработанные классы можно найти в пакете business:
Тесты для классов бизнес-логики располагаются в аналогичном пакете в папке tests.
В качестве паттерна для реализации данного слоя было решено выбрать шаблон Data Mapper по следующим причинам:
- Как и шаблон Active Record, он хорошо сочетается с шаблоном Domain Model
- Поля объектов бизнес логики совпадают с колонками в таблице БД
- Обмен с БД будет предельно простым (на уровне "достать из таблицы/положить в таблицу")
- В отличе от Active Record, шаблон позволяет отделить слой доступа к данным от слоя бизнес-логики.
Для реализации наследования использовался шаблон Single Table Inheritance. В данном случае этот шаблон подходит лучше всего, так как иерархия наследования присутствует только в классах Customer и Administrator, поля которых практически совпадают (за исключением поля Discount у класса Customer). Для реализации данного шаблона было введено дополнительное поле Type.
Схема разработанной базы данных:
В качестве БД использовался Apache Derby версии 10.9.1.0.
Разработанные классы можно найти в пакете db.
- ConnectionManager - интерфейс, описывающий создание соединения с БД.
- DerbyConnectionManager - конкретный класс для доступа к рабочей БД.
- Mapper - базовый класс для всех мапперов.
- UserMapper - маппер для класса User.
- BookMapper - маппер для класса Book.
- OrderMapper - маппер для класса Order.
- OrderEntryMapper - маппер для класса OrderEntry.
- PublisherMapper - маппер для класса Publisher.
Тесты для классов слоя источника данных располагаются в аналогичном пакете в папке tests.
Сервисный слой инкапсулирует бизнес-логику приложения, образует набор доступных операций и управляет ответом приложения в каждой операции. Разработанные классы можно найти в пакетах service и httpservice.
- BookCatalogue - класс для получения различной информации о книгах.
- BookInfoParser - класс для проверки ввода данных о книге пользователем.
- OrderCatalogue - класс для получения различной информации о заказах.
- PublisherCatalogue - класс для получения различной информации об издателях.
- UserCatalogue - класс для получения различной информации о пользователях.
- GBooksHttpConnecter - класс для доступа к сервису Google Books.
- JsonBookMapper - класс для преобразования ответов от внешнего сервиса.
- JsonBookObject - класс отображения между книгой из бизнес-логики и ее представления в формате JSON.
- Server - HTTP сервер для обработки запросов внешнего сервиса.
Реализация графического интерфейса с использованием библиотеки Swing находится в пакете gui.
- AuthFrame - окно авторизации.
- RegistrationFrame - окно регистрации.
- BuyFrame - окно покупки книги.
- CheckoutFrame - окно оформления заказа.
- GoogleBookFrame - окно отображения информации с Google Books.
- MainAdminFrame - основное окно администратора.
- MainCustomerFrame - основное окно пользователя.
Тестирование проводилось как автоматически, при помощи Unit-тестов, так и вручную.
Запуск тестов:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running business.OrderEntryTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.039 sec
Running business.CartTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
Running business.Isbn13Test
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 sec
Running business.BookTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
Running business.Isbn10Test
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
Running db.PublisherMapperTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.408 sec
Running db.UserMapperTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.218 sec
Running db.OrderEntryMapperTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.266 sec
Running db.OrderMapperTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.084 sec
Running db.BookMapperTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.29 sec
Results :
Tests run: 37, Failures: 0, Errors: 0, Skipped: 0
- Главное окно приложения:
- Регистрация пользователя:
- Поиск книги и вывод информации о ней с Google Books:
- Покупка книги
- Предоставление информации внешнему сервису
- Главное окно администратора
- Модификация книги
В результате работы были изучены основные архитектурные шаблоны проектирования, получены навыки по их использованию. Также были рассмотрены типовые решения организации бизнес-логики, слоя доступа к данным, сервисного слоя. После прохождения всего цикла разработки (от сбора требований до комплексного тестирования) был получен работоспособный проект, соответствующий исходным требованиям.