Aggregates
An Aggregate is a cluster of domain objects that are treated as a single unit with regards to data changes.
/// <summary>
/// Aggregate implementation
/// </summary>
/// <typeparam name="TIdentity">The type of unique business identifier</typeparam>
/// <typeparam name="TKey">The type of database primary key</typeparam>
public abstract class Aggregate<TIdentity, TKey> : EntityBase<TKey>, IAggregate
where TIdentity : ValueObject<TIdentity>
where TKey : struct, IEquatable<TKey>
{
/// <summary>
/// Domain events collection
/// </summary>
public IReadOnlyCollection<IDomainEvent> DomainEvents => _domainEvents.ToList();
/// <summary>
/// Business identifier
/// </summary>
public abstract TIdentity Identity { get; internal set; }
private readonly List<IDomainEvent> _domainEvents;
/// <summary>
/// CTOR
/// </summary>
public Aggregate()
{
_domainEvents = new List<IDomainEvent>();
}
/// <summary>
/// Raises/adds domain event
/// </summary>
/// <typeparam name="TEvent">The type of the class representing domain event</typeparam>
/// <param name="domainEvent">Domain event</param>
protected void Raise<TEvent>(TEvent domainEvent)
where TEvent : IDomainEvent
{
_domainEvents.Add(domainEvent);
}
/// <summary>
/// Clears all domain events
/// </summary>
public void ClearEvents()
{
_domainEvents.Clear();
}
}Last updated