Книга: ASP.NET MVC Framework

Паттерн Delegate

Паттерн Delegate

Этот паттерн похож на паттерн Event с одним существенным отличием: отсутствует метод xxxComplete. Вместо этого метод xxx сам занимается возвращением результата ActionResult на основании данных, полученных от асинхронных операций. Так выглядит определение метода действия при использовании паттерна Delegate:

public Func<ActionResult> Foo(Guid? userId)

Для демонстрации реализации данного паттерна перепишем пример паттерна Event по-другому:

public Func<ActionResult> XXX(Guid userId)
{
  UserData userData = new UserData();
  AsyncManager.RegisterTask(
    callback => BeginXXX(userId, callback, null),
    asyncResult =>
    {
      userData = EndXXX(asyncResult);
    }
  );
  return () => {
    ViewData["userData"] = userData;
    return View() ;
  };
}

Главное отличие реализации паттерна Delegate в приведенном фрагменте от паттерна Event состоит в том, что для возвращения результата выполнения действия используется не ActionResult, а Func<ActionResult>, который представляет собой анонимную функцию, возвращающую результат в виде ActionResult. По сравнению с паттерном Event данный паттерн имеет упрощенный единый механизм, не разделенный на несколько методов, и максимально напоминает работу действий в синхронных контроллерах. При использовании этого паттерна у разработчика нет необходимости заботиться ни об обработке AsyncManager.OutstandingOperations, ни о заполнении AsyncManager.Parameters.

Оглавление книги


Генерация: 1.380. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз