Asp.net-Mvc

ASP.NET MVC - 控制器中應該存在業務邏輯嗎?

  • October 24, 2008

幾天前, Derik Whitaker 發表了一篇文章,這引起了我一段時間以來的好奇:業務邏輯是否應該存在於控制器中?

到目前為止,我看到的所有 ASP.NET MVC 展示都將儲存庫訪問和業務邏輯放在控制器中。有些甚至還會在那裡進行驗證。這導致了相當大、臃腫的控制器。這真的是使用MVC框架的方式嗎?看起來這最終會導致大量重複的程式碼和邏輯分佈在不同的控制器上。

業務邏輯確實應該在模型中。你應該瞄準胖模型,瘦控制器。

例如,而不是:

public interface IOrderService{
   int CalculateTotal(Order order);
}

我寧願有:

public class Order{
   int CalculateTotal(ITaxService service){...}        
}

這假設稅收是由外部服務計算的,並且需要您的模型了解外部服務的介面。

這將使您的控制器看起來像:

public class OrdersController{
   public OrdersController(ITaxService taxService, IOrdersRepository ordersRepository){...}

   public void Show(int id){
       ViewData["OrderTotal"] = ordersRepository.LoadOrder(id).CalculateTotal(taxService);
   }
}

或類似的東西。

引用自:https://stackoverflow.com/questions/235233