using BuildingBlocks.Domain.Event; namespace BuildingBlocks.Domain.Model { public abstract class Aggregate : Aggregate { } public abstract class Aggregate : Entity, IAggregate { private readonly List _domainEvents = new(); public IReadOnlyList DomainEvents => _domainEvents.AsReadOnly(); public void AddDomainEvent(IDomainEvent domainEvent) { _domainEvents.Add(domainEvent); } public IEvent[] ClearDomainEvents() { IEvent[] dequeuedEvents = _domainEvents.ToArray(); _domainEvents.Clear(); return dequeuedEvents; } public virtual void When(object @event) { } public long Version { get; protected set; } = -1; public TId Id { get; protected set; } } }