首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免循环依赖: DAL.DbContext.DbSet<BLL.Model>

如何避免循环依赖: DAL.DbContext.DbSet<BLL.Model>
EN

Stack Overflow用户
提问于 2013-04-11 02:41:09
回答 3查看 604关注 0票数 1

如果DbContext在DAL中,则DbSets的泛型类型参数不能是BLL类(域模型)。分隔这些层的最佳实践方法是什么?DAL中的一个额外的模型?接口?

EN

回答 3

Stack Overflow用户

发布于 2013-04-11 02:56:40

如果你在做DDD,我相信仓库(至少是它的接口)是你的业务/域层的一部分。您的存储库实现将是一个单独的程序集,它必须引用该业务/域层。因此,您的DAL知道您的业务对象,但反过来却不知道。要进行依赖注入,您可能需要在DAL层中配置容器,以便为IRepository接口使用存储库。如果您需要一个工作模式单元,那么您的接口很可能也必须是业务层的一部分。同样,您的实现将在您的DAL中,DAL将适当地配置DI容器。这实际上是我不喜欢存储库模式的原因之一,因为您需要确保您的界面的用户正确地管理IUnitOfWork,或者您需要一些东西来包装完成此操作的存储库。

在传统的n层架构中,事情有点不同。在这种情况下,您的业务层可以与DAL通信,我通常将DAL构建为具有表示数据库中一行数据的DTO。然后,业务层将使用这些DTO来更新业务对象(或者,如果您使用的是CSLA.Net之类的东西,则业务对象知道如何更新自身的内容)。

无论哪种方式,都不应该出现以循环引用结束的情况。

票数 3
EN

Stack Overflow用户

发布于 2013-04-11 02:44:58

我通常认为域模型是一个单独的层。

如果我们看一下经典的MVC悖论,那么视图和控制器都使用该模型。

没有理由不让DAL使用它。

但是,模型不会引用DAL;对数据存储的所有操作都将由控制器完成。

所以一般的流程是-

用户与View交互View调用Controller上的方法Controller使用DAL检索Model对象Controller调用Model对象上的方法,必要时保存它们(使用DAL),并向<代码>D9返回答案

票数 1
EN

Stack Overflow用户

发布于 2013-04-12 12:17:41

你的BLL或域层不应该担心数据访问的技术细节,BLL应该是独立于技术的。如果你想坚持使用实体框架,你应该生成POCO实体并将它们移动到单独的层,这样你就可以避免电路引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15933839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档