English 中文(简体)
控制器处理应用程序流程,那么我的业务逻辑应该放在哪里?
原标题:
  • 时间:2008-12-16 16:07:03
  •  标签:

我会先承认我对MVC非常陌生。这种设计模式在高层次上对我来说很有意义,但现在,随着我探索ASP.NET MVC,一些架构方面的细节正在挑战我的先入之见。学习是一件好事。

我最近一直在使用Oxite,它是由微软创建的ASP.NET MVC学习工具,因此也是ASP.NET MVC的一款明显的参考应用程序。

但是今天我看到了Rob Conery的关于Oxite的博客文章

One of the things that the Oxite team decided to do was to separate the Controllers and Views into another Project for what I can only assume is the separation of business logic from view logic. This can lead to some confusion since Controllers are meant to handle application flow - not necessarily business logic.

这让我感到很迷惑。这个分离是MVC的原则,因此是Oxite开发人员的错误还是Rob的见解?如果业务逻辑属于模型,为什么Oxite团队把它放在控制器中?如果不在控制器中,我该如何执行业务逻辑的操作?

另外,考虑到Rob S的评论,我使用Oxite作为学习基准是不是犯了一个错误?

最佳回答

你的业务逻辑应该放在业务层。控制器使用业务层来创建模型让视图渲染。一个很好的例子是Rob Conery制作的MVC商城应用程序。Oxite目前因为似乎没有很好地利用MVC框架而受到了很多负面报道。

你想要一个与你的控制器分离的业务层的原因是你可能想要在多个控制器甚至多个应用程序中重复使用该业务层。例如,普通用户用于显示数据的功能以及用于更新和添加数据的管理功能。你可能在两种情况下都使用相同的 BL 组件,但有不同的控制器和视图来渲染数据。模型对象将是相同的。

问题回答

你可以用你的实体,聚合,存储库和服务实现你的业务层(即模型)。服务调用存储库,存储库以实体的形式从数据访问层拉取数据。

这可以在单独的项目中设置,该项目仅仅是一个动态链接库。

接下来,将您的MVC应用程序(实际上是您的表示层)与业务层项目结合使用。控制器将与您的服务合作,将这些服务生成的数据注入ViewData,然后将其注入到您的视图中。

控制器应仅处理路由问题,例如基于表单、查询字符串、Cookie、会话等用户输入决定显示哪些视图。

“MVC纯洁主义者”社区就Oxite作为良好MVC实例的有效性发出抗议。最重要的是,业务逻辑不应该包含在控制器中,随着未来几个月中Oxite被重构,这点你一定会看到的。”





相关问题
热门标签