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>("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.