从Pro ASP.NET MVC书籍的第49页引用
当然可以放置域名 逻辑到控制器,即使 你不应该,因为它似乎 无论如何它会起作用。这很容易 如果你想象你,请避免这种情况 有多种UI技术(例如, 一个ASP.NET MVC应用程序加上一个 本机iPhone应用程序)运行 在相同的基础业务领域 层(也许有一天你会!)。 考虑到这一点,你很清楚 不想把域逻辑放进去 任何UI图层。
为什么他似乎在第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);
}
答案 0 :(得分:1)
if (cart.Lines.Count == 0)
测试确实可以由模型的验证逻辑处理,不应该放在控制器中。就个人而言,我会像这样重写这个控制器动作:
[HttpPost]
public ActionResult CheckOut(CheckOutViewModel checkOut)
{
if (ModelState.IsValid)
{
orderSubmitter.SubmitOrder(checkOut);
return View("Completed");
}
return View(checkOut);
}