Изменение синхронных операций на асинхронные на уровне бизнес-служб и репозитория (ASP.NET MVC 2) - PullRequest
1 голос
/ 23 апреля 2011

Я работаю над веб-сайтом, связанным с путешествиями, и вот моя высокоуровневая архитектура:

ASP.NET MVC 2 (Presentation Layer)  
Services Layer  
Repository Layer communicating with external J2EE Services

В настоящее время все мои слои поддерживают ТОЛЬКО синхронную связь, например:

//Pricing Controller...
public ActionResult GetRates()
{
    //Contruct Pricing Request            
    //PricingRequest request = Contruct Pricing Request...; 
    PricingResponse response = _pricingService.GetComponentPricing(request);
    //....
    //...
    return View(response);
}

//Pricing Service...
public PricingResponse GetComponentPricing(PricingRequest pricingRequest)
{
    //Do Something...
    PricingResponseDomainObject responseDomainObject = _pricingRepository.GetComponentPricing(pricingRequest.ConvertToPricingRequestDomainObject());
    //Apply Business Rules and perform some action on response
    //Convert DomainObjectResponse into ServiceObjectResponse...
    return response(PricingResponse);
}

//Pricing Repository...
public PricingResponseDomainObject GetComponentPricing(PricingRequestDomainObject pricingRequest)
{
    //Do Something...
    //Call J2EE Service and Get Response
    //Return Response
    return response(PricingResponseDomainObject);
}

СейчасМне нужно изменить контроллер цен на AsyncController и преобразовать public ActionResult GetRates() в асинхронное действие.

Какие изменения мне нужно внести в уровни Service & Repository для поддержки асинхронных операций?Нужно ли мне переписывать их полностью?

Редактировать: необходимо изменить контроллер на асинхронный

Для определенного сценария поиска мне нужно вызвать службу J2EE 1до 5 раз (независимые операции), объедините все ответы в один ответ и передайте его контроллеру, чтобы иметь возможность представить его пользователю.

1 Ответ

0 голосов
/ 23 апреля 2011

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

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