JujaLabs / sqlcmd

0 stars 5 forks source link

Реализовать основные команды для sqlCMD, используя паттерн «команда» #115

Open AVM82 opened 6 years ago

AVM82 commented 6 years ago

Приступать к выполнению после завершения задачи по созданию View и MainController.

Пользователь вводит с консоли строку вида commandName|param1|param2|…|paramN, где commandName – название команды, paramN – параметры необходимые для выполнения команды. Контроллер (MainController) хранит в себе все команды, с которыми может работать приложение, и после каждого ввода пробегает по этому списку, запуская на выполнение необходимую команду. Для этого скорей всего придется переписать логику метода run() в классе MainController. Если введенная строка не соответствует ни одному из известных шаблонов команд, тогда в консоль выводим сообщение о том, что команда не найдена.

  1. В пакете controller создать пакет command, где будут находиться классы всех команд. Каждый класс-команда должен содержать в себе поле final String template = «шаблон команды».

  2. Создать интерфейс Command, который должен содержать следующие методы:

    • boolean canProcess(String command) Метод на вход принимает введенную пользователем строку и возвращает true, если реализующий этот интерфейс класс может обработать указанную команду, иначе false. Проще говоря, если команда соответствует шаблону, тогда true.
    • void process(String command). В этом методе описывается логика поведения команды. На вход приходит введенная пользователем строка.
  3. Команда exit (без параметров):

    • создать класс Exit реализующий интерфейс Command.
    • boolean canProcess(String command) -> проверяет соответствует ли введенная пользователем строка шаблону команды exit.
    • void process(String command) -> выводит в консоль сообщение о завершении работы и закрывает приложение.
    • команда может выполняться без подключения к базе данных
    • все последующие команды реализуют интерфейс Command и создаются аналогично
  4. Команда help (без параметров):

    • выводит в консоль все возможные команды и их параметры.
    • команда может выполняться без подключения к базе данных.
  5. Команда list (без параметров):

    • выводит в консоль список всех существующих в базе данных таблиц в виде [table1, table2, … , tableN]
    • команда НЕ МОЖЕТ выполняться без подключения к базе данных
  6. Команда find (параметр tableName):

    • выводит в консоль содержимое таблицы tableName в виде

      | field1 | field2 |… | fieldN |

      | value1 | value2 |… | valueN1 | | value3 | value4 |… | valueN2 | | value5 | value6 |… | valueN3 |

    • команда НЕ МОЖЕТ выполняться без подключения к базе данных.
  7. Неподдерживаемая команда:

    • создать класс Unsupported реализующий интерфейс Command.
    • boolean canProcess(String command) ->всегда возвращает true.
    • void process(String command) -> выводит в консоль сообщение о том, что введенная команда не существует.
  8. Команда connect(параметры -> databaseName|userName|password)

    • производит подключение к базе данных
  9. Обработать ситуацию когда пользователь попытается выполнить команду для которой обязательно требуется подключение к базе данных, для этого создать класс-команду IsConnect реализующий интерфейс Command. Метод isProcess возвращает true если коннект с базой данных НЕ установлен, иначе false

  10. Все команды покрыть тестами

    Для тех кому скучно :)

  11. Команда insert (параметры -> tableName|field1=value1|field2=value2|…|fieldN=valueN)

    • вставляет в таблицу tabelName данные field1=value1|field2=value2|…|fieldN=valueN
    • команда НЕ МОЖЕТ выполняться без подключения к базе данных.
  12. Команда delete (параметры -> tabelName|field1=value1)

    • удаляет из таблицы tabelName данные, где field1=value1
    • команда НЕ МОЖЕТ выполняться без подключения к базе данных
  13. Команда update(параметры -> tableName|field1=value1| field2=value2)

    • обновляет данные в таблицы tabelName. В поле field1 записывается значение value1, где field2=value2
    • команда НЕ МОЖЕТ выполняться без подключения к базе данных
  14. Команда select(параметры -> tableName|field1,field2,...,fieldN| key=value)

    • выбирает данные полей field1,field2,...,fieldN из таблицы tablName, где поле key принимает значение value1.
    • команда НЕ МОЖЕТ выполняться без подключения к базе данных
danilkuznetsov commented 6 years ago

Надо подумать на реализацией паттерна команда, посмотри пожалуйста https://dzone.com/articles/design-patterns-command на митинге обсудим более подробнее