Gran parte dei vantaggi di Event Sourcing si applicano alla capacità di controllare il sistema e mostrare lo stato di un aggregato per tutta la sua durata. Tuttavia, non sono stato in grado di trovare esempi su dove registrare chi ha emesso il comando e quando è stato emesso.
Ho fatto molto del mio apprendimento suddividendo il viaggio CQRS su MSDN. L'unico posto in cui vedo l'indicazione di chi ha creato qualcosa è nella classe ConferenceEvent
.
public abstract class ConferenceEvent : IEvent
{
public Guid SourceId { get; set; }
// **snip**
public Owner Owner { get; set; }
}
Non riesco a trovare alcuna indicazione che quando si verifica l'evento è mai registrato. Ogni Command
deve avere CreatedOn
e CreatedBy
che poi viene propagato a Event
. Quindi, quando reidratate l'aggregato, che verrebbe ereditato dall'esempio seguente, gli eventi saprebbero quali campi chi e quando compilare?
public abstract class EventSourced : IEventSourced
{
[Required]
public string CreatedBy { get; set; }
public DateTime CreatedOn { get; set; }
public string LastModifiedBy { get; set; }
public DateTime? LastModifiedOn { get; set; }
public string DeletedOn { get; set; }
public DateTime? DeletedBy { get; set; }
}
Ogni evento sembra essere intuitivamente perché mentre contiene le informazioni per cosa e dove ; ma per gli altri due di dubya?