gpt4 book ai didi

c# - 如何让表现层(ASP.NET MVC)对数据访问技术(Entity Framework)一无所知?

转载 作者:行者123 更新时间:2023-11-30 22:00:50 24 4
gpt4 key购买 nike

前提:

我正在练习领域驱动设计,我将我的解决方案分为 4 层:

  • 表示层
    • 用于 RESTful API 网络服务的 ASP.NET Web API 2 项目
    • 用于文档和管理屏幕的 ASP.NET Web MVC5 项目
  • 应用层
    • 负责从表示层获取命令并使用任何域服务的类库项目
  • 领域层
    • 包含业务模型和逻辑的类库项目
    • 包含域服务的类库项目
  • 基础架构层
    • 一个包含所有具体实现的类库项目,例如使用 Entity Framework 的 dataq 持久化、使用 Log4net 的日志记录、使用 Simple Injector 的 IoC 等

领域层只有一组为聚合定义的存储库接口(interface),它取决于基础设施层中存在的实现数据访问机制来隐藏实现细节。

在本练习中,我决定首先使用实体​​框架数据库方法。当然,基础设施项目中有一个包含连接字符串的 app.config


问题:

好吧,我花了很多时间试图分离所有的关注点并专注于领域模型。在表示层(即 API 和 MVC 项目),没有直接引用基础设施项目。并且已设置 IoC 容器,因此所需接口(interface)的所有具体实现都将注入(inject)到 Controller 构造函数中。

例如,当我选择 API 项目作为启动项目并运行它时,我得到了

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code.

Additional information: No connection string named 'xxxxxx' could be found in the application config file.


问题:

现在我明白了,如果我将 Entity Framework 安装到 API 项目中,将连接字符串从基础设施项目的 app.config 复制并粘贴到 web.config 中API 项目,一切正常。但这打破了我们分离关注点的初衷,不是吗?如果我们这样做,那么使用领域驱动设计并使数据访问技术从表示层无知的意义何在?

我们不直接引用数据访问技术的直接实现(即使用dbContextLinq的具体实现)的原因是我们可以轻松切换地下访问技术到其他东西。

那么正确的做法是什么?!!

我不想在表示层安装 Entity Framework,也不想到处复制连接字符串。我希望存储库的所有数据访问和具体实现都存在于一个库中。

最佳答案

Entity Framework 配置必须在使用它的项目中。这并不意味着它会破坏您的分层结构或您的关注点分离。

关于c# - 如何让表现层(ASP.NET MVC)对数据访问技术(Entity Framework)一无所知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246656/

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