Zamiast 10 metod w repozytorium do edycji modelu stworzyłem jedną metodę "Update", która przyjmuje obiekt i coś wykonuje.
Eventy znajdujące się w owym modelu przypisane są w repozytorium do konkretnych metod.
Problem jest taki, że ta konfiguracja wykonuje się co stworzenie repozytorium - co request ;(
W jaki sposób to zmienić? Co zastosować?
public class Document : Entity
{
public void Approve()
{
this.IsApproved = true;
this.AddEvent(new Approved());
}
public void Disapprove()
{
this.IsApproved = false;
this.AddEvent(new Disapproved());
}
}
public class Approved : IEvent
{
}
public interface IDocumentRepository
{
Task<IResult> UpdateAsync(Document document);
}
public async Task<IResult> UpdateAsync(Core.Document document)
{
IEvent domainEvent = document.Events.FirstOrDefault();
return await this.actions[domainEvent.GetType()].Invoke(document, domainEvent);
}
public DocumentRepository(IDocumentRepositoryClient client)
{
this.PopulateFunctions(); // konfiguracja przypisania metod do eventów
}
private Dictionary<System.Type, Func<Core.Document, IEvent, Task<IResult>>> actions;
private void PopulateFunctions()
{
this.actions = new Dictionary<Type, Func<Core.Document, IEvent, Task<IResult>>>
{
[typeof(Core.Approved)] = this.ApproveAsync,
[typeof(Core.Disapproved)] = this.DisapproveAsync,
};
}
private async Task<IResult> ApproveAsync(Core.Document document, IEvent domainEvent)