Spring Boot 2.x实战68 - Spring Data 12 - Spring Data JPA领域事件(Domain Events)

2.8 领域事件

由于在DDD中采用了“设计小聚合”的原则,因此避免了领域模型的相互关联,从而避免了在应用演进中形成“大泥球”(Big Ball of Mud),也因为上述的原因,本书将不讲解@OneToMany、@ManyToMany等关联注解。聚合之间在没有了关联关系后,聚合之间的数据通讯通过领域事件来完成,领域事件是由聚合根发出的。

Spring Data对领域事件做了专门的支持,使用@DomainEvents注解注册领域事件或者继承AbstractAggregateRoot使用它的registerEvent方法注册事件。

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Person {
   
    @DomainEvents // 使用集合类注册事件列表
    Collection<Object> domainEvents(){
   
        List<Object> events= new ArrayList<Object>();
        events.add(new PersonSaved(this.id, this.name, this.age));
        return events;
    }

    @AfterDomainEventPublication //所有事件发布完成后调用,一般用来清空事件列表
    void callbackMethod() {
   
       domainEvents().clear(); 
    }
}

当Repository每一次调用save方法时,领域事件都会被发布。

我们的领域事件定义:

import lombok.Value;
@Value
public class PersonSaved 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值