using BuildingBlocks.Core.Event; using BuildingBlocks.Core.Model; namespace BuildingBlocks.EventStoreDB.Events { public abstract class AggregateEventSourcing : Entity, IAggregateEventSourcing { 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; } } }