Очередь команд - PullRequest
       1

Очередь команд

5 голосов
/ 23 мая 2011

Итак, у меня есть программа управления базами данных (sql), над которой я работаю, имея дело с товарами, которые продает моя компания. Для основной части программы информация об элементе обновляется по мере прохождения пользователем некоторых пользовательских элементов управления. Это все работает отлично. Но теперь я перехожу к разделу программы более высокого уровня, который добавляет / удаляет / копирует элементы. Это не может быть «обновление на лету», как редактирование информации об элементе, так как было бы слишком легко все испортить. Поэтому я хочу настроить файл-> сохранить тип сделки для них здесь. Как я вижу, эта работа создает все команды sql в списке, а затем запускает их все при сохранении.

Доступные здесь функции: добавление нового элемента, удаление элемента, копирование из другого элемента и переименование.

Так что это будет список вроде:

insert...
update...
update...
delete...
update...
etc.

Он будет проходить и выполнять все команды. У меня проблема в том, что у меня уже есть класс, в котором есть методы для обработки всех этих функций. Я не могу придумать, как вызвать все эти методы в очереди, и переписывание всех операторов sql в другом классе кажется мне глупым. Есть ли способ, чтобы я мог вспомнить список чего-то вроде:

item.Rename()
item.ChangeSize()
item.Delete()

У меня такое чувство, что я переосмысливаю это ... или, может быть, недооцениваю ... я не знаю.

1 Ответ

6 голосов
/ 23 мая 2011

То, что вы ищете, это Command Pattern.

Основная идея состоит в том, что у вас есть ICommand интерфейс, который имеет метод Execute().
Затем вы реализуете несколько ConcreteCommandНапример, RenameCommand с параметризованным конструктором или свойством NewName.

Не забудьте соответствующим образом обработать исключения и, возможно, реализовать Undo-метод, если они могут возникнуть.Я не знаю достаточно о вашем заявлении, чтобы делать предположения здесь.

public interface ICommand
{
    void Execute();
}

public class RenameCommand : ICommand
{
    private string newName;

    public RenameCommand(string newName)
    {
        this.newName = newName;
    }

    void ICommand.Execute()
    {
        item.rename(newName);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...