如果DbContext在DAL中,则DbSets的泛型类型参数不能是BLL类(域模型)。分隔这些层的最佳实践方法是什么?DAL中的一个额外的模型?接口?
发布于 2013-04-11 02:56:40
如果你在做DDD,我相信仓库(至少是它的接口)是你的业务/域层的一部分。您的存储库实现将是一个单独的程序集,它必须引用该业务/域层。因此,您的DAL知道您的业务对象,但反过来却不知道。要进行依赖注入,您可能需要在DAL层中配置容器,以便为IRepository接口使用存储库。如果您需要一个工作模式单元,那么您的接口很可能也必须是业务层的一部分。同样,您的实现将在您的DAL中,DAL将适当地配置DI容器。这实际上是我不喜欢存储库模式的原因之一,因为您需要确保您的界面的用户正确地管理IUnitOfWork,或者您需要一些东西来包装完成此操作的存储库。
在传统的n层架构中,事情有点不同。在这种情况下,您的业务层可以与DAL通信,我通常将DAL构建为具有表示数据库中一行数据的DTO。然后,业务层将使用这些DTO来更新业务对象(或者,如果您使用的是CSLA.Net之类的东西,则业务对象知道如何更新自身的内容)。
无论哪种方式,都不应该出现以循环引用结束的情况。
发布于 2013-04-11 02:44:58
我通常认为域模型是一个单独的层。
如果我们看一下经典的MVC悖论,那么视图和控制器都使用该模型。
没有理由不让DAL使用它。
但是,模型不会引用DAL;对数据存储的所有操作都将由控制器完成。
所以一般的流程是-
用户与View交互View调用Controller上的方法Controller使用DAL检索Model对象Controller调用Model对象上的方法,必要时保存它们(使用DAL),并向<代码>D9返回答案
发布于 2013-04-12 12:17:41
你的BLL或域层不应该担心数据访问的技术细节,BLL应该是独立于技术的。如果你想坚持使用实体框架,你应该生成POCO实体并将它们移动到单独的层,这样你就可以避免电路引用。
https://stackoverflow.com/questions/15933839
复制相似问题