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 {

本文介绍了在Spring Boot 2.x中如何利用Spring Data JPA实现领域事件,遵循领域驱动设计(DDD)的小聚合原则。通过领域事件,避免了聚合之间的直接关联,减少了事务边界,提升性能。文中详细展示了如何定义和处理领域事件,以及在实际操作中如何发布和监听这些事件,特别是在雇员和聚合根之间的交互。同时,文章还提及作者的新书,涵盖了Spring Boot的广泛知识,包括Spring Web MVC、响应式编程和微服务等。
最低0.47元/天 解锁文章
4166

被折叠的 条评论
为什么被折叠?



