entity-framework - .NET REST 服务、 Entity Framework 和松耦合

标签 entity-framework rest service datacontext loose-coupling

我正在开发一个使用 ASP.NET MVC3 和 SQL Server 中的数据库的 Web 应用程序项目。还有一个移动应用程序通过 REST 服务使用同一数据库中的数据。以下是我的应用程序的一些层:

  • 模型 - ADO.NET 数据模型,使用 Entity Framework

  • 数据访问层 - 具有从数据库中检索数据的查询的存储库

  • Web 应用程序 - MVC3 项目,使用存储库,使用 Structure Map 和 DI 松散耦合,数据库上下文在 HttpRequest 的末尾处理

  • Core - DAL 和服务层之间的另一层,使用存储库并将数据公开给服务层。某种业务逻辑层。

  • 服务层 - REST 服务,了解核心层但不了解 DAL。将数据映射到 DTO 并向客户端公开

我遇到的此类应用程序架构的问题是服务层上的松散耦合。服务层引用了核心层。核心层引用了数据访问层并使用其存储库。虽然存储库没有默认构造函数。他们期望 1 个参数及其数据库对象上下文(一次性对象)。

直接在我的网站上使用存储库没有问题。我正在使用 Structure Map 和 DI 使其松散耦合。每个上下文都在 HttpRequest 的末尾处理。

问题出在Service层和Core层。我也想在那里有松耦合,但不确定如何实现它?如何将数据上下文注入(inject)其中并确保它在特定时刻得到处理?我想听听有关如何将它们组合在一起的一些建议。

最佳答案

Service Layer has reference to Core layer.

没关系。

Core layer has reference to Data Access Layer and uses its repositories.

那可不行。

您的“核心”应该是您的领域,具有业务规则和逻辑。它不应该有任何依赖关系。

从栈底开始:

  1. Repo - 不依赖于其他层。
  2. 服务 - 对 Core 和 Repo 的依赖。
  3. 核心 - 不依赖于其他层。
  4. Web - 依赖于一切。

我们就是这样做的。我们结合使用接口(interface)驱动编程和依赖注入(inject)来处理松散耦合。

示例流程:

  1. HTTP 请求传入(API、Web 层等)
  2. 找到 Controller 。 DI 容器发现容器依赖于 ISomethingService 并解决它,包括任何进一步的依赖性(服务、 repo 等)。
  3. Controller 调用 ISomethingService 上的方法。
  4. ISomethingService 实现(由 DI 选择)调用 ISomeRepo 上的方法。
  5. ISomeRepo 实现(由 DI 选择)调用 EF/DB,返回“数据对象”给服务。
  6. 服务将“数据对象”映射到“核心”对象并返回给 Controller 。

这些对象的实例化应由您的 DI 容器处理。上面我们使用的唯一缺少的是“工作单元”,它基本上包装了 EF 上下文。

关于entity-framework - .NET REST 服务、 Entity Framework 和松耦合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657740/

相关文章:

java - 无法使用 HTTPS 连接

REST批量删除多个项目

coldfusion - ColdFusion 中的 SOA 风格架构?

c++ - Windows 10 中的 Windows 服务安装/卸载

java - 是否有一个开源工具,用于将现有数据库公开为一组 Web 服务

c# - 使用 Entity Framework Code First 在 PostgreSQL 中存储图像

entity-framework - Entity Framework 最重要的限制

entity-framework - Entity Framework SET IDENTITY_INSERT

c# - 使用 Database.SqlQuery() 的 Entity Framework ,其中列名是无效的 C# 成员名称

Java 读取 JSON