Derik Whitaker几天前发布了一篇article,这篇文章触及了我一段时间以来一直好奇的观点:应该在控制器中存在业务逻辑吗?
到目前为止,我见过的所有ASP.NET MVC演示都将存储库访问和业务逻辑放在了控制器中。有些人甚至还在其中加入了验证。这会导致相当大的、臃肿的控制器。这真的是使用MVC框架的方式吗?似乎这只会导致大量重复的代码和逻辑分散在不同的控制器上。
发布于 2008-10-24 21:00:17
业务逻辑真的应该在模型中。你的目标应该是胖的模型,瘦的控制器。
例如,而不是拥有:
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);
}
}
或者类似的东西。
发布于 2012-07-18 05:17:53
发布于 2009-01-19 20:04:52
这是一个很有趣的问题。
我认为有趣的是,在真正将“业务逻辑”完全放在模型中的意义上,大量示例MVC应用程序实际上并没有遵循MVC范例。Martin Fowler指出,MVC不是四人帮意义上的模式。相反,如果程序员要创建一个玩具应用程序以外的东西,就必须向其添加模式。
因此,简而言之,“业务逻辑”确实不应该存在于控制器中,因为控制器增加了处理视图和用户交互的功能,而我们希望创建的对象只有一个目的。
一个更长的答案是,在将逻辑从控制器移动到模型之前,您需要在模型层的设计中投入一些想法。也许您可以使用REST处理所有应用程序逻辑,在这种情况下,模型的设计应该相当清晰。如果没有,你应该知道你将使用什么方法来防止你的模型变得臃肿。
https://stackoverflow.com/questions/235233
复制相似问题