Skip to content

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

Description

@AVM82

Приступать к выполнению после завершения задачи по созданию 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. Все команды покрыть тестами


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

  1. Команда insert (параметры -> tableName|field1=value1|field2=value2|…|fieldN=valueN)
    • вставляет в таблицу tabelName данные field1=value1|field2=value2|…|fieldN=valueN
    • команда НЕ МОЖЕТ выполняться без подключения к базе данных.
  2. Команда delete (параметры -> tabelName|field1=value1)
    • удаляет из таблицы tabelName данные, где field1=value1
    • команда НЕ МОЖЕТ выполняться без подключения к базе данных
  3. Команда update(параметры -> tableName|field1=value1| field2=value2)
    • обновляет данные в таблицы tabelName. В поле field1 записывается значение value1, где field2=value2
    • команда НЕ МОЖЕТ выполняться без подключения к базе данных
  4. Команда select(параметры -> tableName|field1,field2,...,fieldN| key=value)
    • выбирает данные полей field1,field2,...,fieldN из таблицы tablName, где поле key принимает значение value1.
    • команда НЕ МОЖЕТ выполняться без подключения к базе данных

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions