聚合将由 some 创建application service
,而不是由另一个聚合。
像这样
SomeAggregate aggregate = new SomeAggregate();
repo.save(aggregate);
期望在应用程序服务结束时aggregate
保存并SomeAggregateCreated
发布一个事件。我测试过,并不总是有效,有时构造函数执行后没有立即注册事件。
这是教师课:
public class Teacher extends AbstractAggregateRoot<Teacher> {
public Teacher() {
registerEvent(new TeacherAdded(id, name));
}
}
这是TeacherAdded
:
@AllArgsConstructor
@Getter
@ToString
@EqualsAndHashCode(callSuper = true)
public class TeacherAdded extends AbstractDomainEvent {
private TeacherId teacherId;
private String name;
}
这是AbstractDomainEvent
和DomainEvent
@Getter
@ToString()
@EqualsAndHashCode()
public abstract class AbstractDomainEvent implements DomainEvent {
protected Date occurredOn;
public AbstractDomainEvent() {
this(new Date());
}
public AbstractDomainEvent(Date occurredOn) {
this.occurredOn = occurredOn != null ? occurredOn : new Date();
}
@Override
public Date occurredOn() {
return occurredOn;
}
}
public interface DomainEvent {
public Date occurredOn();
}
AbstractAggregateRoot
复制自,org.springframework.data.domain.AbstractAggregateRoot<A>
并hasCapturedEvent
添加方法进行测试。
public boolean hasCapturedEvent(DomainEvent event) {
return domainEvents.contains(event);
}
如果我运行这个:
// ...
TeacherAdded teacherAdded = new TeacherAdded(teacherId, teacherName);
Teacher teacher = new Teacher();
assertTrue(teacher.hasCapturedEvent(teacherAdded));
它有时会失败,有时会成功。