asp.net-mvc – ASP.NET MVC – 应该在控制器中存在业务逻辑吗?

Derik Whitaker在几天前发布了一个article,它打了一个我已经好奇一段时间的点:应该在控制器中存在业务逻辑吗?

到目前为止,我所见过的所有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);
    }
}

或类似的东西。

http://stackoverflow.com/questions/235233/asp-net-mvc-should-business-logic-exist-in-controllers

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:asp.net-mvc – ASP.NET MVC – 应该在控制器中存在业务逻辑吗?