【问题标题】:Where to put Business Logic classes in an Entity Framework - ASP.NET MVC 4 Solution?将业务逻辑类放在实体框架中的什么位置 - ASP.NET MVC 4 解决方案?
【发布时间】:2017-08-27 15:37:41
【问题描述】:

我有一个解决方案,其中一个项目是实体框架,并且有我的 ASP MVC 项目,我正在寻找一些关于在我的 POCO 对象和 DBContext 之上创建的想法的建议或意见,DBContext 是一个具有静态类的业务逻辑层具有所有方法(例如具有 GetContactByID、GetAllContacts、GetContactsByType 的 ContactBLL 类)以允许访问模型数据并且可以在控制器操作中访问。这样我就不用把这个方法的实现代码放在Controller Actions的方法中了,在其他Action Controller中调用这个方法就可以复用了。我会很感激你的意见,因为它可以指导我回答一个我在一周左右根据对这个问题的答案问自己的问题(关于在哪里定义 DBContext 以及如何使用它)。

【问题讨论】:

  • 为什么要使用静态类?对非静态类进行单元测试会更容易,尤其是当它们都使用接口时。

标签: c# asp.net-mvc entity-framework asp.net-mvc-4


【解决方案1】:

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

  1. 数据访问层(数据库上下文和存储库等)您可以制作 Project.DataAccess,它将只有数据库上下文类和存储库。

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

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

有关详细信息,您可以查看此http://prodinner.codeplex.com/ 代码

【讨论】:

    【解决方案2】:
    1. 为您的 POCO 创建单独的类库,

    2. 然后为您的存储库创建另一个类库,这应该 仅包含存储库所需的接口

    3. 并且实现将在另一个类库上,如 Project.EF, Project.NH 将包括实体映射、迁移、存储库 实施。但实际上,你可能不会改变 你的 ORM 库一旦实施,因为它只会导致你 很头疼(只有我的 2 美分)。

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

    5. Web 项目作为单独的库。您的 MVC 项目的 Models 文件夹将包含您的 ViewModels。

    这是我现在使用的,当然不是最好的结构,它只是我满意的东西:)。希望能帮助到你。

    【讨论】:

    • 谢谢,我会将您的建议与其他答案一起加入。
    【解决方案3】:

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

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

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

    3. DAL 是 DBContext 及其数据实体的位置。

    4. 公共项目由共享功能组成,例如在 1) 2) 和 3) 中使用的 Logging

    请阅读更多 https://www.codeproject.com/Articles/70061/Architecture-Guide-ASP-NET-MVC-Framework-N-tier-En https://chsakell.com/2015/02/15/asp-net-mvc-solution-architecture-best-practices/

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 2011-04-15
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2012-01-12
      • 2014-10-10
      • 2013-09-14
      相关资源
      最近更新 更多