Создать класс констант для всех поддерживаемых комманд
Создать класс ApplicationContext (пока пустой)
Создать интерфейс IService с двумя методами (см. диаграмму). Один будет реализовать логику исполнения команды и возвращает результат в текстовом виде, готовый просто для вывода на экран. Второй возвращает команду, которую имплементация поддерживает.
Создать имплементации IService для комманд
-- help
-- categories
-- category (тут пользователь передаст ID категории в параметрах метода)
Пока в БД не лезем, просто хардкодим данные в коде, для примера, благо модель ты уже написал. Но так, чтобы безболезненно заменить на вызов к БД потом.
В application при старте написать метод, в котором происходит поднятия контекста приложения,
а именно создаешь ApplciationContext, объекты сервисов.
В application классе написать бесконечный цикл, в котором ожидаем комманду от пользователя и парсим ее. По команде ищем нужный сервис,
--- Если нашли, то вызываем его, получаем String, выводим в консоль, ожидаем след. команду
--- Не нашли, написали общее сообщение, что команда не поддерживается, ожидаем след. команду.
HelpService
a. Можно referenceInformation вообще как константу сделать, т.е. static final.
b. 17-я ява кстати позволяет делать вот так со строками
"""
bla bla
bla bla
bla bla
"""
c. Ты проверяешь наличие входящих параметров, а они нужны вообще здесь? если я вызову справку, то ей вообще никакие параметры не нужны
CategoriesService -
a. условие проверки на пустой список можно вообще вынести вначало и сразу вернуть No categories, иначе делать цикл с добавление \n в конце
b. Тот же вопрос на проверку входящих параметров
DalleHoodieApplication
a. Смысла нет создавать CommandList объект, если ты просто используешь его статические поля.
Там какой то странный файл с названием d, в services