Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> список команд для консольной строки 
:(
    Опции темы
Дарида
Дата 12.8.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.8.2011

Репутация: нет
Всего: нет



есть консольное приложение. и поддерживаемый им список команд.
в какой структуре это всё хранить?

вариант первый:

создать абстрактный класс.

Код

    internal abstract class AbstractCommand
    {
        public string[] Args { get; set; }
        public AbstractCommand(string[] args)
        {
            Args = args;
        }

        public abstract void PerformCommand();
    }


и от него наследовать для каждой поддерживаемой команды свой класс.

специальная функция будет возвращать нужный класс.
Код

GetCommand
{
            switch (command)
            {
                case "/help": return new HelpCommand(args);
                ...
                default: throw new ArgumentException(InvalidCommandMsg);
            }
}


и будет вызываться команда этого класса.
Код

            GetCommand(command, commandArgs).PerformCommand();



вариант второй:

создать класс Command

в него положить 
Код


public delegate void CommandDelegate(string[] args);
public static DoCommand(string command, string[] args);

private static HelpCommand (string[] args);
...


в кейсе писать:
...
case "/help": return new Command.CommandDelegate(Command.HelpCommand )
...


а там где вызывается GetCommand:
Код

DoCommand (string command, string[] args)
{
           Command.CommandDelegate cmd = GetCommand('help');
           cmd(args);
}



собственно вопрос:
как лучше - 
каждую функцию сложить в отдельный класс
или
все функции в один?


ну или ещё как-нибудь?))

Это сообщение отредактировал(а) Дарида - 12.8.2011, 13:30
PM MAIL   Вверх
jonie
Дата 12.8.2011, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Атрибутом я бы сделал. Типа CommandAttribute(string cmd, string description). И использовал бы для получения всего списка комманд (IList) непосредственно MEF с его LazyLoad.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0389 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.