forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   подобие консоли (http://forum.boolean.name/showthread.php?t=18197)

wppt 20.05.2013 17:58

подобие консоли
 
собираюсь делать некое подобие консоли(ну, т.е. чтобы входные строки интерпретировала, руководствуясь заранее заданным "словарем")... раньше с этим дело не имел, поэтому прошу помощи.
Я думал так сделать - задать словарь, каждое слово связать с делегатом, все что после слова - параметры... ну т.е. пользователь вводит строку в консоль - первое значение есть слово, определенное в "словаре", все остальные слова - параметры к методу, связанному с делегатом... только вот проблема - как я понял, производительность будет хромать, да и различных сигнатур может быть очень много, следовательно это не лучший вариант. Как же тогда?

moka 20.05.2013 18:18

Ответ: подобие консоли
 
Ну со словарём - всё от части верно.
Это тупо key(string)<>value(class) словарь, который будет указывать на класс который будет иметь свой метод парсинга параметров.

Подумай о том как это реализовать чтобы оно удобно масштабировалось.
Я бы сделал интерфейс который нужно наследовать классом для каждой команды, в данном интерфейсе будут требоваться методы:
Help(Console)
Parse(Console, String)

Метод Help нужен для того чтобы например распарсить такую строку:
instance ?
Твой консоль будет всегда знать, что после команды если идёт вопросительный знак - значит это запрос help'а по команде. Твой консоль найдёт по словарю экземпляр класса команды, и вызовет Help, который уже сам сделает что надо - например выведет текст в консоль с инфой по команде.

А при например такой строке:
intance 100
У тебя идёт всегда разбивание строки по пробелу, и первый в списке - будет команда, находишь экземпляр класса команды, и далее шлёшь всю строку исключая команду, в данном случае "100". В методе Parse уже сам реализуешь как и что делать с этой строкой. Ну и выводишь там результат если нужно обратно в консоль.

Таким образом у тебя будет класс консоли, словарь команд, интерфейс для каждой команды, и возможность создавать классы команд наследуя интерфейс.
Получается весьма масштабируемая система для консоли. Хранить классы команд, можно в разных файлах, например в файле для пользователей команды для работы с пользователями, и т.п.
Это добавляет модульности.

wppt 20.05.2013 22:33

Ответ: подобие консоли
 
не знаю, может вообще "макроязык" какой нибудь впаять... типа интерпретируемого, только еще более абстрактный... но тут уж подумать точно придется...

можно допустим ввести свои типы-синонимы для типов ц#, только более абстрактные... как в perl допустим - всего 3 типа... и с каждым продумать соответствия операций и операндов

Dream 21.05.2013 03:12

Ответ: подобие консоли
 


Часовой пояс GMT +4, время: 21:21.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot