看完這個video後,我想知道如果我使用我的控制器錯了。控制器究竟應該包含什麼?MVC如何保持模型瘦身
對於我的博客,我有一個post控制器,具有方法: 創建 顯示 列表 loadPost 像 厭惡
雖然我的崗位模型只有少數訪問規則,驗證規則和相關信息。網絡上有MVC應用程序的例子嗎?
看完這個video後,我想知道如果我使用我的控制器錯了。控制器究竟應該包含什麼?MVC如何保持模型瘦身
對於我的博客,我有一個post控制器,具有方法: 創建 顯示 列表 loadPost 像 厭惡
雖然我的崗位模型只有少數訪問規則,驗證規則和相關信息。網絡上有MVC應用程序的例子嗎?
我強烈建議你閱讀 http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/04/24/how-we-do-mvc.aspx
這裏是我的什麼控制器不應該做的不完全名單:
應該做的:
壞:
public ActionResult PlaceOrder(Guid orderid)
{
if (HttpContext.Session["user"] == null)
return Redirect("Login");
if (!ValidOrderId(orderid)) return Redirect();
var order = cart.Get(orderid);
if (order == null) { ViewData["orderid"] = orderid; return View("Select"); }
order.Status = OrderStatus.Placed;
foreach (var item in order.Items)
item.Update();
var cart = Cart.GetCurrent();
cart.Save(order);
return Redirect("Show", "Orders", new { orderid = orderid });
}
好
[Authorize]
[ModelStateToTempData]
// OrderViewModel.Id/OrderViewModel.Instance - validates id,
// gets it from repository, set Instance or ModelState error
public ActionResult PlaceOrder(OrderViewModel<Order> order)
{
if (!ModelState.IsValid)
return View("Select", order);
var order = order.InstanceFromDatabase;
_injectedCart.SetOrderPlaced(order);
return RedirectToAction<OrdersController>(c => c.Show(order));
}
順便說一句,我很少看到好的MVC例子,包括的NerdDinner。它們都處理動作內部的業務邏輯,沒有視圖模型等等。這通常適用於他們所參與的 - MVC功能演示 - 但它不應被視爲優秀的設計示例。一個或多或少的好例子是CodeCampServer,以及ASP.NET MVC In Action中的伴奏書。但並非沒有缺點(例如貧血域模型)。
但是,如果不嘗試遵循域驅動設計,而是有一個簡單的數據驅動的需求,事情可能會更容易。
非常好的帖子。 – Marco 2013-04-12 13:38:11
控制器應包含足夠的邏輯以解釋什麼用戶已通過所述處理開了一個服務層之前要做。 因此,如果用戶說「馬克這篇文章是一個我喜歡」,點擊喜歡按鈕,該控制器可確保用戶被授權,然後讓我們的服務層手柄實際上做標記後等 如果工作用戶說「創建一個新的博客條目」,那麼控制器將收集帖子,標籤,時間戳和其他相關信息,並對數據進行最小限度的驗證。然後它將處理切換到服務層。如果服務層發現問題,那麼它應該拋出一個異常,然後您可以在控制器中處理該異常。
我的名字不是MVC。我建議你停止喂她。 ;-) – slashmais 2009-09-23 19:21:47