首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC -业务逻辑应该存在于控制器中吗?

ASP.NET MVC -业务逻辑应该存在于控制器中吗?
EN

Stack Overflow用户
提问于 2008-10-24 20:57:03
回答 6查看 50.7K关注 0票数 99

Derik Whitaker几天前发布了一篇article,这篇文章触及了我一段时间以来一直好奇的观点:应该在控制器中存在业务逻辑吗?

到目前为止,我见过的所有ASP.NET MVC演示都将存储库访问和业务逻辑放在了控制器中。有些人甚至还在其中加入了验证。这会导致相当大的、臃肿的控制器。这真的是使用MVC框架的方式吗?似乎这只会导致大量重复的代码和逻辑分散在不同的控制器上。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-10-24 21:00:17

业务逻辑真的应该在模型中。你的目标应该是胖的模型,瘦的控制器。

例如,而不是拥有:

代码语言:javascript
复制
public interface IOrderService{
    int CalculateTotal(Order order);
}

我宁可:

代码语言:javascript
复制
public class Order{
    int CalculateTotal(ITaxService service){...}        
}

这假设税是由外部服务计算的,并要求您的模型了解外部服务的接口。

这会让你的控制器看起来像这样:

代码语言:javascript
复制
public class OrdersController{
    public OrdersController(ITaxService taxService, IOrdersRepository ordersRepository){...}

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

或者类似的东西。

票数 75
EN

Stack Overflow用户

发布于 2012-07-18 05:17:53

我喜欢Microsoft Patterns & Practices展示的图表。我相信这句格言:“一张图片胜过千言万语”。

票数 65
EN

Stack Overflow用户

发布于 2009-01-19 20:04:52

这是一个很有趣的问题。

我认为有趣的是,在真正将“业务逻辑”完全放在模型中的意义上,大量示例MVC应用程序实际上并没有遵循MVC范例。Martin Fowler指出,MVC不是四人帮意义上的模式。相反,如果程序员要创建一个玩具应用程序以外的东西,就必须向其添加模式。

因此,简而言之,“业务逻辑”确实不应该存在于控制器中,因为控制器增加了处理视图和用户交互的功能,而我们希望创建的对象只有一个目的。

一个更长的答案是,在将逻辑从控制器移动到模型之前,您需要在模型层的设计中投入一些想法。也许您可以使用REST处理所有应用程序逻辑,在这种情况下,模型的设计应该相当清晰。如果没有,你应该知道你将使用什么方法来防止你的模型变得臃肿。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/235233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档