подобие консоли
собираюсь делать некое подобие консоли(ну, т.е. чтобы входные строки интерпретировала, руководствуясь заранее заданным "словарем")... раньше с этим дело не имел, поэтому прошу помощи.
Я думал так сделать - задать словарь, каждое слово связать с делегатом, все что после слова - параметры... ну т.е. пользователь вводит строку в консоль - первое значение есть слово, определенное в "словаре", все остальные слова - параметры к методу, связанному с делегатом... только вот проблема - как я понял, производительность будет хромать, да и различных сигнатур может быть очень много, следовательно это не лучший вариант. Как же тогда? |
Ответ: подобие консоли
Ну со словарём - всё от части верно.
Это тупо key(string)<>value(class) словарь, который будет указывать на класс который будет иметь свой метод парсинга параметров. Подумай о том как это реализовать чтобы оно удобно масштабировалось. Я бы сделал интерфейс который нужно наследовать классом для каждой команды, в данном интерфейсе будут требоваться методы: Help(Console) Parse(Console, String) Метод Help нужен для того чтобы например распарсить такую строку: instance ? Твой консоль будет всегда знать, что после команды если идёт вопросительный знак - значит это запрос help'а по команде. Твой консоль найдёт по словарю экземпляр класса команды, и вызовет Help, который уже сам сделает что надо - например выведет текст в консоль с инфой по команде. А при например такой строке: intance 100 У тебя идёт всегда разбивание строки по пробелу, и первый в списке - будет команда, находишь экземпляр класса команды, и далее шлёшь всю строку исключая команду, в данном случае "100". В методе Parse уже сам реализуешь как и что делать с этой строкой. Ну и выводишь там результат если нужно обратно в консоль. Таким образом у тебя будет класс консоли, словарь команд, интерфейс для каждой команды, и возможность создавать классы команд наследуя интерфейс. Получается весьма масштабируемая система для консоли. Хранить классы команд, можно в разных файлах, например в файле для пользователей команды для работы с пользователями, и т.п. Это добавляет модульности. |
Ответ: подобие консоли
не знаю, может вообще "макроязык" какой нибудь впаять... типа интерпретируемого, только еще более абстрактный... но тут уж подумать точно придется...
можно допустим ввести свои типы-синонимы для типов ц#, только более абстрактные... как в perl допустим - всего 3 типа... и с каждым продумать соответствия операций и операндов |
Ответ: подобие консоли
|
Часовой пояс GMT +4, время: 21:21. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot