@OXDemager

Как реализовать обработчик консольных комманд в приложении?

Здравствуйте! Нужно в консольном приложении реализовать обработку команд. Пользователь вводит в консоль команду, она считывается с помощью Console.ReadLine() и должна собстно выполнится программой. Комманда может содержать параметры(разделенные с помощью пробела). Погуглил, попадаются только примеры реализации через switch..case., т.е:
string command=Console.ReadLine();
switch (command) {
	case "Команда":
	{
	 Действие();
	 break;
	}
}

Тут сразу возникают вопросы: Как принимать команду с параметрами? И насколько правилен такой подход? (Мне кажется, вряд ли разработчики больших консольных приложений, в которых может быть под сотню команд в каждом, будут прописывать 100 case'ов в коде). Тогда, может есть какой другой метод обработки?
  • Вопрос задан
  • 588 просмотров
Пригласить эксперта
Ответы на вопрос 3
lexxpavlov
@lexxpavlov
Программист, преподаватель
Разделяйте строку по пробелу - так вы получите имя команды и параметры, в первом элементе массива - имя команды, в остальных - параметры. Каждый параметр нужно разделить по символу "="- и вы получите имя параметра и значение.
Дальше, хорошо создать интерфейс (и/или абстрактный класс) хендлера команды и реализовать интерфейс для каждой команды. Так у вас получится несколько классов, по одному для каждой команды. Останется выбрать нужный хендлер, и запустить его, указав ему параметры. Если команд много, то можно подумать о дальнейшем разделении классов хендлеров на подгруппы.

Если нужно, могу показать примерный код для моего способа. А по хорошему, используйте готовый код (правда, смотрите, умеет ли тот чужой код парсить из строки, а не из входных аргументов программы).
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Тут всё зависит от уровня сложности этих команд. Если там одна-две лексемы, то достаточно сравнения строк, если команды сложные - можно написать небольшой лексер и конечный автомат, отрабатывающий команды.
Ответ написан
Комментировать
keyros
@keyros
http://about.me/keyros
Прочитайте про паттерн команда или паттерн запрос - ответ

примера кода, то можно получать строку с консоли, парсить ее регуляркой и понеслаь обработка запроса
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы