Реализовать два сервиса:
-
Первый сервис(серв1):
- Добавляет маршрут;
- На вход получает массив ид точек маршрута, на выход возвращает ид маршрута.
- При добавлении маршрута вызывает второй сервис для расчета времени, необходимого для его прохождения, и сохраняет результат расчёта.
- Выводит список маршрутов ( с массивом точек маршрута).
- Выводит отдельный маршрут ( с массивом точек маршрута).
- Добавляет маршрут;
-
Второй сервис(серв2):
- По точкам из маршрута возвращает время, которое нужно затратить на этот маршрут(-1 если не достижимо).
- Предусмотреть, что каждый сервис может использовать свою базу данных.
- Формат api – JSON
- Серв1 могут использовать все
- Серв2 могут использовать только другие сервисы
- организовать доступ по ролям
Сущности установлены условием задачи:
Маршрут:
id – int
is_ready – bool //посчитано ли время на маршрут
time – int // время на маршрут в минутах
Точки маршрута:
id – int
id_route – int //ид маршрута
Граф точек маршрутов:
id_point_one – int // ид первой точки
id_point_second - int //ид второй точки
time – int // время на преодоления расстояния между двумя точками
Сущности заданы условием и не подлежат изменению. Однако для увеличения возможностей расширения функционала можно было бы разделить сущность "Маршрут" на две. Одна часть отвечала бы за сущность "Маршрут", а вторая за время, необходимое для прохождения маршрута. К первой относились бы слабоизменяемые или неизменяемые атрибуты, а вторая могла бы гибко изменяться при редактировании маршрута.
Условия задачи полностью описывают предметную область. Именование объектов:
Сущность | Программный объект |
---|---|
Маршрут | Route |
Точка | Point |
Ребро графа точек | Edge |
Синтетические объекты:
Сущность | Программный объект | Описание |
---|---|---|
Расписание | Schedule | Связь маршрута и точек |
Диаграмма объектов:
Для организации и сборки программных модулей использован Maven.
Для построения структуры приложения используется Spring framework.
Для разграничения доступа к ресурсам используем Spring security.
Для хранения и доступа к данным использована HSQLDB.
Программный комплекс представляет собой три модуля:
Модуль | описание |
---|---|
trace | реализация серв1 |
timing | реализация серв2 |
utilites | вспомогательные утилиты |
Каждый из двух модулей, реализующих сервисы, декомпозирован на четыре части:
Подмодуль | Описание |
---|---|
entities | библиотека объектов и возможных ошибок, а также карта REST запросов к сервису. |
service | базовые действия над программными объектами |
server | реализация веб сервиса |
client | модуль для доступа к веб сервису |
Такое разделение помогает снизить количество зависимостей.
При реализации модуля client
необходимы лишь программные объекты, возможные ошибки и карта запросов из entities
.
server
содержит реализацию бизнес требований, при этом карта запросов для client
и server
связаны,
что исключает рассинхрон при разработке и проблемы при изменении карты запросов в новой версии (при сохранении интерфейса).
В данный модуль вынесены программные объекты которыми манипулирует сервис, ошибки которые могут возникнуть
при работе с объектами.
Также для связи модулей client
и server
в этот модуль вынесена карта http
запросов, что позволяет
снизить вероятность рассинхрона первого и второго.
Задача данного модуля реализовать функции создания, изменения и доступа к объектам, а также предоставить простой интерфейс для этих действий.
При решении первой задачи (в терминах MVC
) данные в БД являются model
, програмные объекты view
,
а сервисы доступа controll
.
Конфигурирование соединений с БД осуществляется в xml файле, без использования аннотаций, для возможности быстрой правки соединения без перекомпиляции всего приложения.
Для решения второй задачи выделим отдельный класс который будет являтся фасадом
данного модуля.
Реализация бизнес логики и сервлетов для взаимодействия по http.
Набор классов для обеспечения доступа к сервисам приложения по http.
Для сборки использовать Maven. После успешной сборки выполнить деплой war файла приложения в любой сервлет контейнер, например Tomcat.
- Николаев А.С.