业务逻辑在MVC中的位置在哪里?

时间:2011-11-10 23:34:01

标签: asp.net-mvc asp.net-mvc-3 business-logic-layer

我是ASP.Net MVC的初学者。在阅读了许多教程并消化其概念之后,我还没有看到一种方法可以清楚地说明业务逻辑的去向。

我的应用程序将大量使用jQuery AJAX用法(它将调用Controller的Actions用于各种目的,例如依赖交互,验证)。我肯定会使用ViewModel概念,但我仍然不清楚业务逻辑应该驻留在哪里。我不想放入控制器或模型。我应该把它放在一个单独的服务层吗?

5 个答案:

答案 0 :(得分:11)

我认为你在一个单独的项目中几乎回答了你自己的问题 不在控制器中,绝对不在模型中。

编辑:请注意,控制器与httpcontext高度耦合,因此将逻辑层移动到不同的dll层是一件非常聪明的事情。

答案 1 :(得分:7)

MVC中的M是用于获取和处理您在应用程序中使用的信息的所有内容。因此,业务层是其中的一部分。

我首先要创建一个单独的类库,然后将所有逻辑放入其中。只要您的类相当小并且具有clear responsibility,如果您需要单独的Web服务(另一个项目需要访问数据),则以后很容易重构。

我通常会创建第三个类库并将所有定义放入其中(服务接口和域模型)。通过这样做,您将遵循separated interface pattern并使以后更容易交换实施(并测试您的业务层)

答案 2 :(得分:2)

您可以简单地将一些业务逻辑放在单独的c#类中,并在控制器中引用它。这就是在Web表单日期间隔离代码的方式。

答案 3 :(得分:2)

理论上的业务逻辑涉及3层架构的中间层。enter image description here

答案 4 :(得分:1)

我见过的大多数简单示例都将简单的业务逻辑放在控制器中,但理想情况下您可能想要创建业务层。

使用MVC3分离业务逻辑的一个很好的例子可以在Microsofts项目Silk中看到,您可以下载here。在此解决方案中,业务逻辑被分离为与MVC项目不同的项目。

在这个项目中,您可以看到控制器逻辑只处理视图和视图模型之间的通信(注意视图模型而不是业务层模型)。视图模型只包含将传递给视图的信息,因此,如果视图上的字段发生更改,则视图模型中的字段也会更改。该项目还进一步将视图模型分离为视图模型,以便将数据传递到视图中,并形成用于传递数据的模型,但这是一个选择问题。

此项目将事务脚本设计模式用于其业务逻辑。控制器使用自己的视图模型将信息传递给业务层,视图模型在命令模式设计中实现接口。从业务层传回的信息是通过业务层自己的业务模型完成的。我完全建议你看看这个项目,以便更好地理解如何实现分离。

为了进一步阅读业务层,我还建议你看看Wrox Enterprise .NET,其中一些章节提供了构建业务层的选项的良好讨论,其中第一个是事务模式用于项目Silk。

希望这有帮助。