gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:25:49 25 4
gpt4 key购买 nike

我正在开发一个使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com