Vedi il codice qui
using System.Collections.Generic;
namespace DddInPractice.Logic.Common
{
public abstract class AggregateRoot
{
private readonly List<IDomainEvent> _domainEvents = new List<IDomainEvent>();
public virtual IReadOnlyList<IDomainEvent> DomainEvents => _domainEvents;
protected virtual void AddDomainEvent(IDomainEvent newEvent)
{
_domainEvents.Add(newEvent);
}
public virtual void ClearEvents()
{
_domainEvents.Clear();
}
}
}
Sto discutendo se usare questa classe nel mio progetto. Mi piace l'idea perché incapsula Domain Events. Se lo utilizzo, tutte le classi Root di aggregazione ne deriveranno. In alternativa, potrei usare un'interfaccia marker come questa (che implementerà tutte le Root aggregate):
public interface IAggregateRoot
{
}
Dovrei:
-
Crea la classe base o
-
Crea l'interfaccia o
-
non fare né?
Mi piace l'idea di contrassegnare i miei Radici aggregati.