C# 在实体框架中的何处放置业务逻辑类-ASP.NET MVC 4解决方案?

C# 在实体框架中的何处放置业务逻辑类-ASP.NET MVC 4解决方案?,c#,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我有一个解决方案,其中一个项目是实体框架,还有我的ASP MVC项目,我在寻找一些关于在POCO对象和DBContext之上创建的想法的建议或意见,DBContext是一个具有所有方法的静态类的业务逻辑层(例如带有GetContactByID的ContactBLL类、GetAllContacts、GetContactsByType)允许访问可以在控制器操作中访问的模型和数据。通过这种方式,我不必将此方法的实现代码放在控制器操作方法中,并且可以在其他操作控制器中调用此方法进行重用。我将非常感谢您的

我有一个解决方案,其中一个项目是实体框架,还有我的ASP MVC项目,我在寻找一些关于在POCO对象和DBContext之上创建的想法的建议或意见,DBContext是一个具有所有方法的静态类的业务逻辑层(例如带有GetContactByID的ContactBLL类、GetAllContacts、GetContactsByType)允许访问可以在控制器操作中访问的模型和数据。通过这种方式,我不必将此方法的实现代码放在控制器操作方法中,并且可以在其他操作控制器中调用此方法进行重用。我将非常感谢您的意见,因为它可以引导我在一周左右的时间里回答我在回答这个问题时向自己提出的一个问题(关于在何处定义DBContext以及如何使用它)。

您可以根据核心功能创建不同的项目

  • 数据访问层(DB上下文和存储库等)您可以创建Project.DataAccess,它将只有DB上下文类和存储库

  • 业务逻辑层(Project.Business)它将具有业务逻辑并调用数据访问层

  • UI层(Project.WebUi)它是mvc项目。 等等

  • 有关详细信息,请参见此代码

  • 为您的POCO创建单独的类库

  • 然后为存储库创建另一个类库,这应该 仅包括存储库所需的接口

  • 实现将在另一个类库上,如Project.EF, Project.NH,其中包括实体映射、迁移和存储库 实现。但事实上,你很可能不会改变 ORM库一旦实现,因为它只会导致 我头痛得厉害(就我的25分)

  • 您将创建业务层(类库)和

  • web项目作为单独的库。MVC项目的Models文件夹将包含ViewModels
    这是我现在使用的,当然不是最好的结构,它只是我满意的东西:)。希望能有帮助

    通常,ASP.NET MVC实体框架解决方案中有四个标准项目。它们是1)MVC、2)核心/业务逻辑层(BLL)、3)数据访问层/DBContext(DAL)和4)公共/实用程序

  • 标准MVC项目包括三个主要元素,即模型、视图和控制器。然而,中到复杂的解决方案通常会从MVC项目中删除模型元素并将其移回BLL,我们称之为ViewModel(POCO)。按照这种结构,MVC项目现在负责使用来自BLL的服务,并通过控制器控制UI

  • 业务逻辑层(BLL)是实现业务逻辑的核心。它负责处理来自MVC项目的请求,并与DAL合作保存数据。如上所述,BLL是定义ViewModel及其关系以及支持实现设计模式的接口/抽象类的地方。Viewmodel(POCO)很可能将一个映射到DAL的数据实体,但我们不直接在View上使用数据实体。遵循此结构将有助于增加ViewModel上的自定义,如添加约束

  • DAL是DBContext及其数据实体所在的位置

  • 公共项目由共享功能组成,如1)2)和3)中使用的日志记录功能

  • 请阅读更多

    为什么要使用静态类?对非静态类进行单元测试会更容易,特别是当它们都使用接口时。谢谢,我将加入您的建议和其他答案。