ASP.NETMVC--控制器中应该存在业务逻辑吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (211)

几天前Derik Whitaker发表了一篇文章,提到了我一直很好奇的一点:业务逻辑是否应该存在于控制器中?

到目前为止,我所见过的所有ASP.NET MVC演示都将控制器中的存储库访问权限和业务逻辑。有些人甚至会在那里进行验证。这导致相当大,臃肿的控制器。这真的是使用MVC框架的方式吗?看起来,这只会导致很多重复的代码和逻辑遍布不同的控制器。

提问于
用户回答回答于

业务逻辑应该真的在模型中。你应该瞄准肥胖模型,瘦骨controllers controllers的控制器。

例如,而不是:

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);
    }
}

或者类似的东西。

用户回答回答于

扫码关注云+社区

领取腾讯云代金券