2011-01-17 10 views
3

はそれはとにかく動作するようにそれが だという理由だけで、も、あなたはいけない ものの、コントローラにドメイン ロジックを置くことは確かに可能であるプロASP.NET MVCブックの49ページコントローラはドメインロジックを持つべきではありません。誰かがこの信念にどれほど忠実に従うべきでしょうか?

から引用。これは、同じ基礎となるビジネスドメイン 層(及び必要になります多分1日に を操作する(例えば、 ASP.NET MVCアプリケーションプラス iPhoneのネイティブアプリケーション)あなたは、複数のUI技術を持っている ことを想像した場合、これを避ける するのは簡単です!)。 これを念頭に置いて、 ドメインロジックを の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); 
} 

関連する:How to avoid placing domain logic in controller?

if (cart.Lines.Count == 0)

答えて

1

テストが実際にモデルの検証ロジックによって処理されている可能性があり、コントローラ内に配置されるべきではありません。個人的には、私はこのようなコントローラーアクションを書き直すでしょう:

[HttpPost] 
public ActionResult CheckOut(CheckOutViewModel checkOut) 
{ 
    if (ModelState.IsValid) 
    { 
     orderSubmitter.SubmitOrder(checkOut); 
     return View("Completed"); 
    } 
    return View(checkOut); 
}