MVC如何正确添加业务层

Posted

技术标签:

【中文标题】MVC如何正确添加业务层【英文标题】:MVC How to add a business layer properly 【发布时间】:2014-11-24 07:27:51 【问题描述】:

我(菜鸟)在 MVC 中重构了一些教学代码。使用不同的网络文章作为指导,我将诸如“添加记录”之类的业务逻辑放入一个单独的项目中。为避免循环引用,我是否也应该将模型和其他组件移动到自己的项目中?

BL,Model 也会在控制器中实例化吗? 谢谢

【问题讨论】:

模型应该是业务层 【参考方案1】:

通常,您的控制器会调用您的业务层。这取决于具体情况,但在大多数情况下,您的业务层将调用数据层,该数据层将创建实际的模型对象。

【讨论】:

【参考方案2】:

首先,如果解决方案的大小可控,则最好将模型留在同一个项目中。

这将是避免循环引用的最佳方法。这是在您创建的程序集不会被许多其他依赖项目使用的条件下,在这种情况下,项目可以分开 - 这取决于您的应用程序的大小和规模。

例如对于小型网站应用程序,我将按以下方式构建 MVC 解决方案 - 使用模型的默认文件夹。这将包含代表业务领域对象的类,并且可以根据需要使用各种属性进行修饰。

为数据访问层创建另一个文件夹很好 - 我为数据访问创建了一个“存储库”文件夹,其中包含对数据源的所有调用,例如通过 oledb 连接、linq 等填充数据集。

控制器从存储库中调用类并用数据填充模型对象。因此,在回答您的问题时,控制器会创建模型的一个实例并通过数据访问层方法填充此模型。

一个例子如下:

控制器代码:

PurchaseOrder model = new PurchaseOrder();

string orderNumber = "123";

model.ListOfItems = purchaseOrderRepository.GetPurchaseOrderItems(orderNumber);

【讨论】:

感谢您的智慧。代码示例很好地展示了如何在同一个项目中进行操作。我想将业务代码移动到它自己的项目中,以模拟一个更大的应用程序,在这个应用程序中,事情会更加共享。在这种情况下,GetPurchaseOrderItems 是从上下文中获取项目还是从模型中获取项目?我认为使用模型会创建循环引用? 您好,您可以创建一个数据访问层项目,该项目将包含前面提到的 Repository 文件夹中的类。同样,一个包含模型对象的业务项目。然后,您可以将这些数据访问层项目和业务项目的引用添加到您的项目中,其中包含控制器和视图。当有许多紧密耦合和依赖的类耦合在一起时,就会发生循环引用。如果您沿着单独程序集的路径走,您可能还想研究工厂模式以创建这些类的实例。 好的,这是有道理的。我假设模型、视图和控制器必须在同一个项目中。如果将它们分开是在良好的编程实践范围内,那么这就是我正在寻找的帮助使代码更可重用的方法。

以上是关于MVC如何正确添加业务层的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net MVC 项目管理

asp.net中的三层架构是啥意思

如何在.net core mvc中使用ModelState包装类分离业务逻辑层

ASP.NET MVC - 服务层 - 业务层 - 数据层 (EF) - SQL DB :: 数据传输?

请问JAVA三层架构,持久层,业务层,表现层,都该怎么理解?和MVC三层模型有啥

架构中MVC模型和业务逻辑层的区别