lundi 17 novembre 2014

Event Sourcing Event typed against an Aggregate


Vote count:

0




I'm looking to enforce the specific type of aggregate, an event can be used with.


I have a basic IEventHandler interface :-



public interface IEventHandler<TEvent> where TEvent : IEvent
{
void Handle(TEvent @event);
}


The Event Base class inherits from this :-



public class Event : IEvent
{
#region Constructors

public Event(Guid aggregateRootId)
{
Timestamp = DateTime.Now;
Id = Guid.NewGuid();
AggregateRootId = aggregateRootId;

}

#endregion

#region Implementation of IEvent<Guid,Guid>

public Guid Id { get; private set; }

public Guid AggregateRootId { get; private set; }

public int Version { get; set; }
public DateTime Timestamp { get; private set; }

#endregion
}


Now I need to make my Aggregate or Class specific Event :-



public class ClientNameChangedEvent : Event
{
#region Constructors

public ClientNameChangedEvent(Guid aggregateRootId, string name, int version) : base(aggregateRootId)
{
Name = name;
Version = version;
}

#endregion

#region Properties

public string Name { get; private set; }

#endregion
}


As the name suggests, I only want to use this against the Client aggregate. I want a way to prevent the programmer registering the event, from associating it against another Aggregate, In the example below, Ive registered an Interest in the client Events against a Case Aggregate.


public class Case : AggregateRoot, IEventHandler {



#region Properties
public string Name { get; private set; }

#endregion

public Case()
{

}

public Case(Guid id, string name) : base(id)
{

}

public void ChangeName(string name)
{
if (!Name.ToUpper().Equals(name.ToUpper()))
{
ApplyChange(new ClientNameChangedEvent(Id, name, Version));
}
}

public void Handle(ClientNameChangedEvent @event)
{
Name = @event.Name;
Version = @event.Version + 1;
}

public void Handle(ClientCreatedEvent @event)
{
Id = @event.AggregateRootId;
Name = @event.Name;
Version = @event.Version;
}
}


}


How can I prevent this?



asked 1 min ago

Derek

2,572






Event Sourcing Event typed against an Aggregate

Aucun commentaire:

Enregistrer un commentaire