package com.flexpoker.framework.domain; import java.util.ArrayList; import java.util.List; import com.flexpoker.framework.event.Event; public abstract class AggregateRoot<T extends Event> { private final List<T> newEvents = new ArrayList<>(); private final List<T> appliedEvents = new ArrayList<>(); protected void addNewEvent(T event) { newEvents.add(event); } protected void addAppliedEvent(T event) { appliedEvents.add(event); } public List<T> fetchNewEvents() { return new ArrayList<>(newEvents); } public List<T> fetchAppliedEvents() { return new ArrayList<>(appliedEvents); } public abstract void applyAllHistoricalEvents(List<T> events); }