Шаблон команды и дизайн параметров - PullRequest
2 голосов
/ 29 января 2010

Мое понимание шаблона команд состоит в том, что у вас просто есть 1 виртуальный метод execute (), и все зависимости, которые может иметь реализация, помещаются в конструктор или посредством внедрения сеттера в реализацию (как обсуждалось здесь ). ).

Однако в реализации шаблона WPF я заметил, что они передают универсальный аргумент в функцию execute () (объяснено здесь ).

Для меня это выглядит как загрязнение интерфейса, что побудило бы добавить универсальный параметр к функции execute ()?

Ответы [ 5 ]

3 голосов
/ 29 января 2010

Канонический шаблон команд обычно иллюстрируется хорошими автономными командами. При этом любая информация, необходимая команде, скрывается в экземпляре объекта Command (обычно через параметризованный конструктор).

Однако в некоторых случаях параметры, необходимые для выполнения, могут быть недоступны во время создания команды (известны только во время выполнения). например Представьте себе SignOutCommand( username ). Имя пользователя определяется, когда пользователь нажимает кнопку SignOut после первого входа в систему.

Таким образом, имя пользователя передается в качестве универсального параметра в Command.Execute(); Каждая команда может определить свой ввод и привести соответственно, например, произвольная команда может потребовать 5 параметров в качестве объекта [].

1 голос
/ 31 января 2010

Что не так с:

public class DeleteCommand : BaseCommand
{
  private Dictionary<string, object> parameters;

  public DeleteCommand(Dictionary<string, object> parameters)
  {
     this.parameters = parameters;
  }

  public void Execute()
  {
     var person = (Person)parameters["Person"];
     var salary = System.Convert.ToDouble(parameters["Salary"]);

     // etc.
  }
}

Теперь, если у вас есть контроллер, который собирает параметры, вы можете передать их в свои команды.

1 голос
/ 29 января 2010

Причиной этого параметра является изоляция между создателем команды - кто знает, какую команду необходимо выполнить, и вызывающим - кем знает когда команда должна быть выполнена.

В некоторых командах некоторая информация, необходимая для выполнения, недоступна для создателя. Вызывающий заполняет пробел, передавая параметр для выполнения. Пример: создатель создает команду, которая фильтрует список записей в соответствии с некоторыми критериями. Список недоступен на сайте создания, так как в приложении существует много видов списков.

Вызывающая сторона укажет, какой список необходимо отфильтровать, передав в качестве параметра значение *. 1013 *

1 голос
/ 29 января 2010

Мы используем немного измененный шаблон команды, так что в дополнение к методу Execute у нас есть два свойства Request и Response, и мы параметризуем их, используя полиморфизм.

1 голос
/ 29 января 2010

Это для привязки данных. Например, когда вы привязываете команду к каждому объекту в списке, текущий экземпляр отправляется методу execute, чтобы вам не приходилось отслеживать текущий экземпляр самостоятельно.

Тем не менее, я не думаю, что понятие команды WPF является реализацией шаблона команды, они просто разделяют терминологию.

...