【问题标题】:DDD and Spring JPADDD 和 Spring JPA
【发布时间】:2019-11-21 22:34:25
【问题描述】:

我从 DDD 和 Spring JPA 开始。分离持久层和域层的概念对我来说看起来和工作得很好,但我发现有一个问题:我们正在失去延迟加载,对吗?是否可以在不加载数据库的所有数据的情况下将域对象与实体映射? 出于这个原因,我认为停止在实体中使用一对多关系和在域对象中使用聚合可能是一个更好的主意。所以我问你一些建议。这是个好主意吗? 我有一个想法,通过停止在域中使用聚合,将一些方法从域对象委托给服务。

所以我想像那样改变某事(我省略了不必要的理解概念元素)。对我来说,构建业务逻辑更简单,因为我们可以直接访问所有对象,但是我们浪费资源,因为每次我们需要一些对象时都需要从数据库中加载大量数据。 :

这样。它使我们可以更好地控制我们需要哪些对象,但是我们在创建业务逻辑时失去了便利,因为我们需要将一些方法委托给服务:

你怎么看?这是一个好主意还是有更好的方法来解决问题。从数据库中加载这么多数据来恢复对象到内存是有点问题的。 这让我有点困惑,因为我发现面向对象编程的标准概念在外部数据库的应用程序中实现是有问题的。

【问题讨论】:

    标签: java hibernate spring-data-jpa domain-driven-design


    【解决方案1】:

    我不知道你为什么说你总是要加载整个数据库。

    您将只加载聚合的数据,因为规则是聚合通过 id 引用另一个。因此,在一对多关系中,您有一个 id 列表。

    存储库加载/存储聚合的数据。

    【讨论】:

    • 谢谢。这很有帮助,如果域对象仅包含 id,则加载过多的 DB 元素没有问题。但这意味着我们失去了访问对象的便利。我们不能直接调用列表的元素。那么,例如,在 Subscription 对象中计算 expiryDate() 呢?订阅应该可以访问持久层还是应该由服务完成?我认为那么工作应该由服务来完成。我说的对吗?
    猜你喜欢
    • 2020-08-28
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2019-12-09
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多