Я пытаюсь получить рабочий код, который использует Event Sourcing и Retroactive, как описано Мартином Фаулером.
Я немного потерял, как события стоят в очереди? поскольку события отправляются один за другим на процесс EventProcessor и обратную функцию. В своей статье он говорит, что класс EventProcessor будет иметь доступ к очереди событий.
но если мой класс EventProcessor выглядит так
public class DomainEventProcessor {
public void process(DomainEvent domainEvent) {
if (domainEvent instanceof ReplacementEvent) {
processReplacement((ReplacementEvent)domainEvent);
} else {
domainEvent.process();
}
}
public void reverse(DomainEvent domainEvent) {
domainEvent.reverse();
}
/*
// replace the event in event queue
*/
private void processReplacement(ReplacementEvent e) {
}
}
Интерфейс событий домена
public abstract class DomainEvent implements Serializable {
public abstract void process();
public abstract void reverse();
}
примерное событие реализации выглядит так:
public class BalanceUpdateEvent extends DomainEvent {
private String subscriberId;
private String balanceId;
private Long delta;
public String getSubscriberId() {
return subscriberId;
}
public String getBalanceId() {
return balanceId;
}
public Long getDelta() {
return delta;
}
@Override
public void process() {
// do nothing
}
@Override
public void reverse() {
SubscriberDomain subscriberDomain = SubscriberAggregate.getSubscriber(subscriberId);
subscriberDomain.handleReverseEvent(this);
}
}
Каждое событие знает, какой доменный объект (который имеет состояние + бизнес-логику) может обрабатывать себя, чтобы внести изменения в состояние объекта домена.
java,events,design-patterns,event-handling,