【发布时间】:2021-10-17 19:56:24
【问题描述】:
我正在尝试发展一个域,其中包含并使用 Java Records 实现了 Aggregate-root,但我无法找到一种方法来使用 Domain Event 概念从一个 Aggregate-root 传播事件。
https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#core.domain-events
以下语法的编译问题:
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import org.springframework.data.domain.AbstractAggregateRoot;
@Table("BALANCE")
public record Balance extends AbstractAggregateRoot<Balance> (
@Id
@Column("ID_BALANCE")
Long balanceId,
@Column("BALANCE")
BigDecimal balance,
@Column("ID_CUSTOMER")
Long customerId,
@Column("LAST_UPDATE")
Timestamp lastUpdate,
@Column("WITHDRAW_LIMIT")
BigDecimal withdrawLimit
) {
//Business logic
}
这个语法没问题:
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import org.springframework.data.domain.AbstractAggregateRoot;
public class BalanceDemo extends AbstractAggregateRoot<BalanceDemo> {
@Id
@Column("ID_BALANCE")
Long balanceId;
@Column("BALANCE")
BigDecimal balance;
@Column("ID_CUSTOMER")
Long customerId;
@Column("LAST_UPDATE")
Timestamp lastUpdate;
@Column("WITHDRAW_LIMIT")
BigDecimal withdrawLimit;
//Constructors, Get, HashCode, Equals, toString
//Business Logic
}
怎么了?是不是不能结合Domain Events使用Java记录?
【问题讨论】:
-
我对 Spring Data 了解得不够多,无法说出这是否可能以某种方式实现,但记录不能扩展诸如
AbstractAggregateRoot之类的类,因为它们都扩展了java.lang.Record。但是,在问题链接的文档中,该示例没有扩展AbstractAggregateRoot,因此也许有一些方法可以使其工作。
标签: java spring-data domain-driven-design spring-data-jdbc