Контроллер не должен иметь доменной логики. Насколько верным следует придерживаться этого принципа? - PullRequest
3 голосов
/ 17 января 2011

Цитирование со страницы 49 книги Pro ASP.NET MVC

Домен конечно можно поставить логика в контроллер, хотя Вы не должны, просто потому что это кажется как будто все равно будет работать. Это легко избежать этого, если вы представляете, что вы иметь несколько технологий пользовательского интерфейса (например, приложение ASP.NET MVC плюс родное приложение для iPhone) работает в той же основной бизнес-сфере слой (и, может быть, однажды вы будете!). Имея это в виду, ясно, что вы не хочу помещать доменную логику в любой из слоев пользовательского интерфейса.

Почему он, кажется, противоречит сам себе на странице 172?

[HttpPost]
public ActionResult CheckOut(Cart cart, ShippingDetails shippingDetails)
{
    // Empty carts can't be checked out
    if (cart.Lines.Count == 0)
        ModelState.AddModelError("Cart", "Sorry, your cart is empty!");

    if (ModelState.IsValid)
    {
        orderSubmitter.SubmitOrder(cart, shippingDetails);
        cart.Clear();
        return View("Completed");
    }
    else // Something was invalid
        return View(shippingDetails);
}

Относится к: Как избежать размещения логики домена в контроллере?

1 Ответ

1 голос
/ 17 января 2011

Тест if (cart.Lines.Count == 0) действительно мог бы быть обработан логикой проверки модели и не должен помещаться в контроллер. Лично я бы переписал это действие контроллера следующим образом:

[HttpPost]
public ActionResult CheckOut(CheckOutViewModel checkOut)
{
    if (ModelState.IsValid)
    {
        orderSubmitter.SubmitOrder(checkOut);
        return View("Completed");
    }
    return View(checkOut);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...