簡體   English   中英

如何使用休眠以 DDD 方式更新此聚合?

[英]How to update this aggregate in DDD way using hibernate?

我有這種情況:

@Entity
public class AggregateA {
    private String fieldA;  
    //around 15 simple fields similar to fieldA

    @OneToMany(mappedBy = "entityFieldA", fetchType= FetchType.EAGER)
    private Set<EntityA> entitiesList;
    
    void updateAggregate() {
       //chose appropriate entity from the list and delegate updating to the `EntityA` class.
       EntityA ent = getSomehow();
       ent.updateField2();
    }
}

@Entity
class EntityA {
    private String entityFieldA;
    private String entityFieldB;
    //few more simple fields here

    void updateField2() {
       //set appropriate field
    }
}

我想使用updateAggregate更新EntityA某些字段(因為我想通過聚合更新所有實體)但問題是如果我通過 db 獲取聚合,我將獲取這 15 個簡單字段,並且我將與實體表和這使性能復雜化。 在此之前,有相當簡單的貧血解決方案。 有 EntityA 的存儲庫,所以我們正在獲取實體並更新它們,而根本不知道該更新。 在那種情況下,我們沒有獲取聚合,也沒有連接。 我們只獲取實體對象列表並更新它們。

我想也許 spring 數據預測可以幫助我,但在這種情況下,我需要創建新的界面(使用我想要獲取的字段),在這種情況下,我也在數百萬個地方傳播我的業務邏輯。

有沒有優雅的 DDD 方法來解決這個問題? 我應該將數據層與業務 DDD 層分離嗎?

在我看來, Hibernate 延遲加載正是您要尋找的。
“任何優雅的 DDD 方法來解決它”,DDD 沒有解決方案,這純粹是一個技術問題,DDD 告訴你你的實體/聚合/行為是什么,你如何在代碼中具體化它們並不是DDD 世界。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM