Skip to content

AlexRogalskiy/roadmap

Repository files navigation

Тестовый проект RoadMap

Постановка задачи

Дано множество городов и дорог, соединяющих эти города. Каждая дорога соединяет два города. Спроектировать и реализовать сервис RoadMap, удовлетворяющий следующим требованиям.

  • Город:
    • Уникальное имя.
    • Координаты (x, y).
  • Дорога:
    • Уникальное имя.
    • Длина.
  • API:
    • Добавление нового города.
    • Добавление новой дороги.
    • Удаление дороги.
    • Получение города по имени.
    • Получение списка дорог по имени города.
  • Основные технические требования:
    • Организовать хранение в памяти.
    • Данные сервиса всегда должны находиться в консистентном состоянии.
    • Нельзя использовать сторонние библиотеки (только JRE).
    • Имплементация сервиса должна быть потокобезопасной (данное требование является дополнительным. Реализуйте его только в том случае, если у вас осталось время, и вы уверены в бизнес-логике своего решения).

Пояснения по реализации

  • Разбил предметную область на модели, разделил приложение на слои (controller, service, model, storage).
  • Сделал обработку исключений выводом в консоль.
  • Расчет расстояния и вывод дорог города сделал в RoadTo, т.к. та было проще и быстрее всего сделать.
  • Выбрал один из самых простых способов синхронизации – навесил на все чувствительные и публичные методы контроллера. Это сработает, т.к. у нас есть только одна точка внешнего взаимодействия с системой – контроллер.

Возможные улучшения реализации

  • Улучшить сообщения в исключениях (сейчас они более общие, вида "object not found"). Как минимум можно конкретизировать. А можно сделать конкретные исключения, напр.: ObjectNotFoundStorageException.
  • Реализовать тесты слоёв приложения (можно самое простое, без JUnit, т.к. см. требования).
  • Можно объединить методы executeOrSout и returnOrSout, чтобы не дублировать обработку исключений.
  • Улучшить вывод результатов операций в консоль (сейчас в toString стандартный вывод полей объекта).
  • Можно улучшить синхронизацию, т.к. она на данный момент не оптимальна.

About

The roadmap project

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages