Skip to content

Commit

Permalink
Added tests for mutable aggregate
Browse files Browse the repository at this point in the history
  • Loading branch information
oskardudycz committed May 3, 2024
1 parent 972180c commit b12f3c2
Show file tree
Hide file tree
Showing 14 changed files with 203 additions and 125 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,32 @@
namespace IntroductionToEventSourcing.BusinessLogic.Slimmed.Mutable;

public abstract class Aggregate
public interface IAggregate
{
public Guid Id { get; protected set; } = default!;
public void Evolve(object @event);

private readonly Queue<object> uncommittedEvents = new();
object[] DequeueUncommittedEvents();
}

public abstract class Aggregate<TEvent>: IAggregate
{
public Guid Id { get; protected set; }

private readonly Queue<TEvent> uncommittedEvents = new();

public virtual void Evolve(TEvent @event) { }

void IAggregate.Evolve(object @event)
{
if (@event is not TEvent typed)
return;

Evolve(typed);
}

public virtual void Evolve(object @event) { }
object[] IAggregate.DequeueUncommittedEvents() =>
DequeueUncommittedEvents().Cast<object>().ToArray();

public object[] DequeueUncommittedEvents()
public TEvent[] DequeueUncommittedEvents()
{
var dequeuedEvents = uncommittedEvents.ToArray();

Expand All @@ -17,8 +35,9 @@ public object[] DequeueUncommittedEvents()
return dequeuedEvents;
}

protected void Enqueue(object @event)
protected void Enqueue(TEvent @event)
{
uncommittedEvents.Enqueue(@event);
Evolve(@event);
}
}
Loading

0 comments on commit b12f3c2

Please sign in to comment.