Introduktion til CQRS og event sourcing #5

Nu hvor vi har fået sluttet cirklen og har fået beskrevet hvordan vi kan få Cirqus op at køre med view-generering, så vil jeg lige dvæle lidt ved initialiseringen – jeg viste det følgende kodeeksempel:

// ved opstart:
var eventStore = new MsSqlEventStore<TimeToBeCrushedView>("mssql", "Events", automaticallyCreateSchema: true);
var repository = new DefaultAggregateRootRepository(eventStore);

var view = new MsSqlViewManager("mssql", "TimeToBeCrushed",
                                                     automaticallyCreateSchema: true);
var dispatcher = new ViewManagerEventDispatcher(aggregateRootRepository, view);

var commandProcessor = new CommandProcessor(eventStore, repository, dispatcher);

// først....
commandProcessor.Initialize();

// og så i resten af applikationens levetid:
commandProcessor.ProcessCommand(...);

og det er helt klart en gyldig måde at instantiere CommandProcessor‘en på, men rent API-æstetisk så mangler der lissom noget… både i forhold til læsbarhed, men måske især i forhold til API discoverability – så derfor vil jeg anbefale denne smøre i stedet for:

var view = new MsSqlViewManager<TimeToBeCrushedView&gt("mssql");

var commandProcessor = CommandProcessor.With()
    .EventStore(e => e.UseSqlServer("mssql", "Events"))
    .EventDispatcher(e => e.ViewManagerEventDispatcher(view))
    .Create();

som er fuldstændig ækvivalent med den anden. Der kan vist ikke være nogen tvivl om at nr. 2 er lidt mere lækker at se på – men hovedsagen er at man kan CTRL+SPACE sig vej igennem den, og afhængig af hvilke NuGet-pakker man har inkluderet, så vil der dukke flere extension methods op som konfigurationsmuligheder.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *