gpt4 book ai didi

spring-data - 领域驱动设计存储库和 Spring Data 存储库之间是否存在不匹配?

转载 作者:行者123 更新时间:2023-12-03 20:27:09 24 4
gpt4 key购买 nike

DDD 为每个聚合指定存储库,但是当采用 Spring Data JPA 时,我们只有在为每个实体声明接口(interface)时才能利用这些好处。如何解决这种阻抗失配?

我希望尝试封装在聚合存储库中的存储库接口(interface),这是一个好的解决方案还是更好的解决方案?

举个例子:Customer是聚合根,实体类似于 Demographics , Identification , AssetSummary等等,每个实体都可以从拥有自己的存储库接口(interface)中受益。在不违反 DDD 的情况下,最好的方法是什么?

最佳答案

…, but when embracing Spring Data JPA, we can leverage the benefits only when we declare interface per entity…



那是错误的,我想了解您从哪里获得这种印象(请随时发表评论)。 Spring Data 存储库期望您的域模型设计采用完全相同的方法:您识别域模型中的聚合,并且只为这些聚合创建存储库接口(interface)。

我认为您需要做的就是将 DDD 概念应用于您的域模型。简单地不要为不是聚合根的实体声明存储库接口(interface)。事实上,如果你声明了这些,你基本上打破了聚合的概念,因为实际的根不能再控制业务约束,因为其他实体可以通过为它们定义的存储库接口(interface)进行操作,即不使用聚合根。

在此 Spring Data example 中找到正确应用的示例.其中, Order是聚合根, LineItem只是一个普通的实体。这同样适用于 Customer (根)和 Address (普通实体)。存储库接口(interface)仅存在于聚合根。

事实上,这种特殊的关系是让 Spring Data REST 等模块首先工作的基本原则。它只公开聚合根的 HTTP 资源,在创建的表示中嵌入普通实体,并创建到其他聚合的链接。

关于spring-data - 领域驱动设计存储库和 Spring Data 存储库之间是否存在不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38538775/

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