Model view controller MVC如何正确添加业务层

Model view controller MVC如何正确添加业务层,model-view-controller,business-logic,business-logic-layer,Model View Controller,Business Logic,Business Logic Layer,我正在(noob)重新分解MVC中的一些教学代码。使用不同的web文章作为指导,我将业务逻辑(如“添加记录”)放在一个单独的项目中。为了避免循环引用,我是否也应该将模型和其他组件移动到它们自己的项目中 BL模型是否也会在控制器中实例化? 谢谢通常您的控制器会呼叫您的业务层。这取决于具体情况,但在大多数情况下,您的业务层将调用一个数据层,该数据层将创建实际的模型对象。首先,如果解决方案是可管理的大小,您最好将模型留在同一个项目中 这将是避免循环引用的最佳方法。这是在您创建的程序集不会被许多其他依赖

我正在(noob)重新分解MVC中的一些教学代码。使用不同的web文章作为指导,我将业务逻辑(如“添加记录”)放在一个单独的项目中。为了避免循环引用,我是否也应该将模型和其他组件移动到它们自己的项目中

BL模型是否也会在控制器中实例化?
谢谢

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

首先,如果解决方案是可管理的大小,您最好将模型留在同一个项目中

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

e、 g.对于一个小型网站应用程序,我将按照以下方式构造MVC解决方案-使用模型的默认文件夹。这将包含表示业务域对象的类,如果需要,可以使用各种属性进行修饰

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

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

例如:

控制器代码:

PurchaseOrder model = new PurchaseOrder();

string orderNumber = "123";

model.ListOfItems = purchaseOrderRepository.GetPurchaseOrderItems(orderNumber);

该模型被认为是商业层面的智慧库。代码示例很好地展示了如何在同一个项目中进行操作。我想将业务代码转移到它自己的项目中,以模拟一个更大的应用程序,在这个应用程序中,事情将更加共享。在这种情况下,GetPurchaseOrderItems是从上下文中获取项目,还是从模型中获取项目?我认为使用模型会创建一个循环引用?您好,您可以创建一个数据访问层项目,该项目将包含前面提到的存储库文件夹中的类。类似地,一个包含模型对象的业务项目。然后,您可以将这些数据访问层项目和业务项目的引用添加到包含控制器和视图的项目中。当有许多紧密耦合且相互依赖的类耦合在一起时,就会出现循环引用。如果您沿着单独程序集的路径走,您可能还希望调查工厂模式以创建这些类的实例。好的,这很有意义。我假设模型、视图和控制器必须在同一个项目中。如果在良好的编程实践中可以将它们分开,那么这就是我希望帮助代码更具可重用性的原因。