Skip to content
This repository has been archived by the owner on Oct 9, 2020. It is now read-only.

Отчет

Alexander Polovtcev edited this page Jun 5, 2013 · 8 revisions

Задание

Магазин по продаже книг.

Сбор функциональных требований

Для покупателя:

  1. Регистрация и авторизация в системе.
  2. Покупка книг.
  3. Поиск книг по различным признакам.
  4. Получение дополнительной информации о книге у внешнего сервиса по ISBN.

Для администратора:

  1. Добавление новых книг в каталог.
  2. Добавление новых издателей.
  3. Модификация уже существующих книг.
  4. Модификация уже существующих издателей.

Для внешнего сервиса

  1. Получение количества проданных книг по ее ISBN.

Разработка вариантов использования

Подробное описание всех вариантов использования

Варианты использования для "покупателя"

  • Регистрация
    1. Пользователь вводит регистрационную информацию (логин и пароль).
    2. Если логин еще не зарегистрирован, то регистрация проходит успешно, иначе пользователю предлагается ввести другой логин.
  • Покупка книги
    1. Пользователь авторизуется.
    2. Пользователь ищет необходмую книгу в каталоге.
    3. Если книга успешно найдена, то при нажатии на кнопку "купить" книга помещается в корзину.
    4. При необходимости пользователь может добавить в корзину несколько книг.
  • Получение данных с внешнего сервиса
    1. При покупке книги, пользователь, нажав на соответствующую кнопку, может получить дополнительную информацию о книге с внешнего сервиса.

Варианты использования для "внешнего сервиса"

  • Получение статистики продаж
    1. Пользователь отправляет запрос, содержащий ISBN книги.
    2. Если книга с таким ISBN существует, то выводится количество проданных книг.
    3. Альтернатива: Если книга не найдена, то выводится сообщение об ошибке.

Варианты использования для "администратора"

  • Управление каталогом книг

    1. Администратор авторизуется.
    2. При успешной авторизации, администратор может выполнить следующие действия: добавить новую книгу или изменить уже существующую.
  • Управление списком издателей

    1. Администратор авторизуется.
    2. При успешной авторизации, администратор может выполнить следующие действия: добавить нового издателя или изменить уже существующего.

Разработка статической объектной модели предметной области

Разработка динамической объектной модели предметной области

Диаграмма последовательностей для операции покупки книги

Диаграмма последовательностей для операции модификации книги администратором

Проектирование слоя бизнес-логики

В качестве паттерна для реализации бизнес-логики было решено выбрать шаблон Domain Model (модель области определения), так как он лучше всего подходит для отображения объектно-ориентированной модели приложения. Однако, паттерн обладает несколькими недостатками (сложность взаимодействия с БД, сложность реализации), которые необходимо учитывать при разработке.

Реализация слоя бизнес-логики

Разработанные классы можно найти в пакете business:

Тесты для классов бизнес-логики располагаются в аналогичном пакете в папке tests.

Проектирование слоя источников данных

В качестве паттерна для реализации данного слоя было решено выбрать шаблон Data Mapper по следующим причинам:

  1. Как и шаблон Active Record, он хорошо сочетается с шаблоном Domain Model
  2. Поля объектов бизнес логики совпадают с колонками в таблице БД
  3. Обмен с БД будет предельно простым (на уровне "достать из таблицы/положить в таблицу")
  4. В отличе от 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.

Комплексное тестирование системы

Тестирование проводилось как автоматически, при помощи 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:

  • Покупка книги

  • Предоставление информации внешнему сервису

  • Главное окно администратора

  • Модификация книги

Выводы

В результате работы были изучены основные архитектурные шаблоны проектирования, получены навыки по их использованию. Также были рассмотрены типовые решения организации бизнес-логики, слоя доступа к данным, сервисного слоя. После прохождения всего цикла разработки (от сбора требований до комплексного тестирования) был получен работоспособный проект, соответствующий исходным требованиям.

Clone this wiki locally