Domain driven design 域实体应该调用存储库吗?
我正在设计一个发布应用程序,并尝试使用干净的体系结构和DDD。在域层的核心深处,我们有许多可配置的业务规则。例如,有一些业务规则用于确定装运的最佳承运人、确定装运模式、确定付款类型等。每个业务规则都从数据库中选择数据,因此我计划使用BizRule存储库。问题是,根据我对DDD原则的理解,域实体(例如Shipping)不应该调用存储库(例如BizRuleRepository)。用例层应该是调用存储库的层。如果我采用这种方法,那么我将不得不将许多复杂的业务规则转移到用例层,我不确定这是否是最好的方法。在这种情况下,创建异常并让域实体调用存储库是否有意义?提前感谢。如果只是为了阅读,应该可以,也许可以更干净,有一个接口/服务(也只有一个方法)将所需的查询表达到您的存储,将您的实体与存储库分离。 通过这种方式,您可以在测试期间轻松地模拟查询,并且将来可以在自己的类中轻松地改进查找方法(或者您也可以为查找传递不同的策略/实现) 当您使用存储库在实体内部写入时,会出现问题 域实体应该调用存储库吗 一般来说,没有;实体(这是一个域关注点)直接与存储库(这是管道)通信是没有意义的 埃文斯在整理他的书时,将这些想法分配到不同的章节Domain driven design 域实体应该调用存储库吗?,domain-driven-design,ddd-repositories,clean-architecture,Domain Driven Design,Ddd Repositories,Clean Architecture,我正在设计一个发布应用程序,并尝试使用干净的体系结构和DDD。在域层的核心深处,我们有许多可配置的业务规则。例如,有一些业务规则用于确定装运的最佳承运人、确定装运模式、确定付款类型等。每个业务规则都从数据库中选择数据,因此我计划使用BizRule存储库。问题是,根据我对DDD原则的理解,域实体(例如Shipping)不应该调用存储库(例如BizRuleRepository)。用例层应该是调用存储库的层。如果我采用这种方法,那么我将不得不将许多复杂的业务规则转移到用例层,我不确定这是否是最好的方法
- 用软件表示的模型——描述实体
- 域对象的生命周期——描述存储库
当您想要单元测试域逻辑而不拖拽整个管道依赖关系世界时,这一额外的间接层非常方便:您将域服务替换为双重测试。如果我需要调用数据库查询进行验证,我将把这个调用放在何处?可能是存储库,但什么叫存储库。。应用程序服务还是域服务?这个答案说:“一个实体能够使用存储库检索另一个实体或检索一些无法保存在内存中的特定信息,这并没有什么错。这就是为什么存储库是埃文斯书中的关键概念的原因