序
本文主要研究一下event-sourcing-cqrs的model
Event
public abstract class Event { private final UUID aggregateId; private final ZonedDateTime timestamp; private final int version; protected Event(UUID aggregateId, ZonedDateTime timestamp, int version) { this。aggregateId = checkNotNull(aggregateId); this。timestamp = checkNotNull(timestamp); this。version = version; } public UUID getAggregateId() { return aggregateId; } public ZonedDateTime getTimestamp() { return this。timestamp; } public int getVersion() { return version; }}
Event定義了aggregateId、timestamp、version屬性
EventStore
public interface EventStore { void store(UUID aggregateId, List
EventStore介面定義了store、load方法
Aggregate
public abstract class Aggregate { private UUID id; private int baseVersion; private List
Aggregate定義了id、baseVersion、newEvents屬性;其applyNewEvent方法會執行apply(event)及newEvents。add(event);apply方法透過反射執行event的apply方法
ValueObject
public abstract class ValueObject { @Override public boolean equals(Object o) { return EqualsBuilder。reflectionEquals(this, o); } @Override public int hashCode() { return HashCodeBuilder。reflectionHashCode(this); } @Override public String toString() { return ToStringBuilder。reflectionToString(this, ToStringStyle。SHORT_PREFIX_STYLE); }}
ValueObject覆蓋了equals、hashCode、toString方法
Specification
public interface Specification
Specification介面定義了isSatisfiedBy方法
小結
event-sourcing-cqrs-examples的model定義了Event、Aggregate、ValueObject抽象類以及EventStore、Specification介面。
doc
event-sourcing-cqrs-examples