Skip to content

Commit a787865

Browse files
authored
Added When method for DomainEvent (#100)
1 parent 9306038 commit a787865

6 files changed

Lines changed: 35 additions & 6 deletions

File tree

samples/EasyWay.Samples/Domain/SampleAggregateRoot.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ public sealed class SampleAggregateRoot : AggregateRoot
44
{
55
internal SampleAggregateRoot()
66
{
7-
Add(new CreatedSampleAggragete());
7+
Apply(new CreatedSampleAggragete());
8+
}
9+
10+
private void When(CreatedSampleAggragete @event)
11+
{
12+
813
}
914

1015
public void SampleMethod()

source/EasyWay/Entity.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
using EasyWay.Internals.BusinessRules;
22
using EasyWay.Internals.Clocks;
33
using EasyWay.Internals.DomainEvents;
4+
using EasyWay.Internals.Entities;
45
using EasyWay.Internals.GuidGenerators;
56
using System.Diagnostics.CodeAnalysis;
7+
using System.Reflection;
68

79
namespace EasyWay
810
{
@@ -26,14 +28,23 @@ protected static void Check(BusinessRule businessRule)
2628
}
2729
}
2830

29-
protected void Add<TDomainEvent>(TDomainEvent domainEvent)
31+
protected void Apply<TDomainEvent>(TDomainEvent domainEvent)
3032
where TDomainEvent : DomainEvent
3133
{
3234
if (domainEvent is null)
3335
{
3436
throw new DomainEventCannotBeNullException<TDomainEvent>();
3537
}
3638

39+
var method = GetType().GetMethod("When", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
40+
41+
if (method is null)
42+
{
43+
throw new NotImplementedWhenMethodException<TDomainEvent>();
44+
}
45+
46+
method.Invoke(this, new object[] { domainEvent });
47+
3748
var domainEventContext = new DomainEventContext()
3849
{
3950
EventId = GuidGenerator.New,

source/EasyWay/Internals/DomainEvents/DomainEventCannotBeNullException.cs renamed to source/EasyWay/Internals/Entities/DomainEventCannotBeNullException.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace EasyWay.Internals.DomainEvents
1+
namespace EasyWay.Internals.Entities
22
{
33
internal sealed class DomainEventCannotBeNullException<TDomainEvent> : EasyWayException
44
where TDomainEvent : DomainEvent
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace EasyWay.Internals.Entities
2+
{
3+
internal sealed class NotImplementedWhenMethodException<TDomainEvent> : EasyWayException
4+
where TDomainEvent : DomainEvent
5+
{
6+
internal NotImplementedWhenMethodException()
7+
: base("Not implemented 'When' method for " + typeof(TDomainEvent).Name) { }
8+
}
9+
}

tests/EasyWay.Tests/Entities/AddDomainEventToEntity.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using EasyWay.Internals.DomainEvents;
1+
using EasyWay.Internals.Entities;
22
using EasyWay.Tests.Entities.SeedWorks;
33

44
namespace EasyWay.Tests.Entities

tests/EasyWay.Tests/Entities/SeedWorks/TestEntity.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace EasyWay.Tests.Entities.SeedWorks
1+
using static EasyWay.Tests.Entities.AddDomainEventToEntity;
2+
3+
namespace EasyWay.Tests.Entities.SeedWorks
24
{
35
internal sealed class TestEntity : Entity
46
{
@@ -10,7 +12,9 @@ public void CheckBusinessRule(BusinessRule businessRule)
1012
public void AddDomainEvent<TDomainEvent>(TDomainEvent domainEvent)
1113
where TDomainEvent : DomainEvent
1214
{
13-
Add(domainEvent);
15+
Apply(domainEvent);
1416
}
17+
18+
private void When(TestDomainEvent @event) { }
1519
}
1620
}

0 commit comments

Comments
 (0)