Это просто функциональная реализация шаблона Command? - PullRequest
0 голосов
/ 16 декабря 2010

Недавно я нашел себя для реализации кода по шаблону, подобному следующему:

public class SomeClass()
{
    private T Execute<T>(Func<T> function)
    {
        // Do some common stuff for every function like logging and try-catch
        function();
    }

    public Type1 Command1()
    {
        Execute<Type1>(() => funcForCommand1);
    }

    public Type2 Command2()
    {
        Execute<Type2>(() => funcForCommand2);
    }
}

Это просто функциональный подход к CommandPattern?В зависимости от ситуации у меня разные версии этого?Вы, вероятно, могли бы достичь точно такого же результата, если бы funcForCommandX унаследовал от некоего ICommand, который определяет функцию Execute, но мне во многих ситуациях мне нравится мой путь лучше, так как большую часть времени команды используются только в одном местев коде и не нужно подвергать остальной части кода.Конечно, вы должны реализовать настоящий шаблон команд, если он используется в большем количестве мест в коде.

1 Ответ

2 голосов
/ 16 декабря 2010

Это зависит от ваших потребностей. Это все, что я могу сказать.

Но я хотел бы заявить, что это не Command Pattern, а может быть делегированием метода.

Command Pattern фокусируется в основном на выполнении метода / задачи. Ниже приведены стандартные поведения, которые можно ожидать от Command в этом шаблоне:

  • Undo / Redo
  • Сделки
  • Выполнение составной команды
  • Макросы

Когда вы оборачиваете реализацию метода / задачи в Command, вы можете предоставить реализации того, что делать, чтобы отменить / отменить то, что было сделано. Обеспечить реализацию по умолчанию при присоединении текущего выполнения к транзакциям, записи макросов, поточно-ориентированному выполнению и т. Д.

С вашим подходом у вас этого нет. И это не легко выполнимо, пока вы не заключите каждую задачу / метод в оболочку Command и не обеспечите вышеупомянутое поведение.

Посмотрите статью Wikipedia для получения более подробной информации о Command Pattern.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...