public void store_a_bunch_of_events() { var ar = new Account {Id = _id}; var eventsToPersist = new List<object>(); eventsToPersist.Add(new AccountOpened{InitialDeposit = 5,Name = "test"}); var startEventsAt = DateTime.Now.AddYears(-1); for(var i = 0; i< 100; i++) { object @event = null; if(i % 1 == 0) { @event = new Deposit {Amount = i,AccountId = ar.Id,At = startEventsAt.AddDays(i) }; }else { @event = new WithDraw {Amount = i, AccountId = ar.Id, At = startEventsAt.AddDays(i)}; } eventsToPersist.Add(@event); } _eventStore.Persist(ar.Id,eventsToPersist.ToArray()); }
public void get_events() { var ar = new Account {Id = _id}; var startedGettingStreamAt = DateTime.Now; var stream = _eventStore.GetEventStream(_id).ToList(); //Console.WriteLine("Took {0} milliseconds to get stream of {1} events", (DateTime.Now - startedGettingStreamAt).TotalMilliseconds, stream.Count()); var startedApplyingEventsAt = DateTime.Now; foreach(var @event in stream) { var eventType = @event.GetType(); var applyMethod = ar.GetType().GetMethods() .FirstOrDefault( mi => mi.Name == "Apply" && mi.GetParameters().Any(pi => pi.ParameterType == eventType)); if (applyMethod != null) applyMethod.Invoke(ar, new[]{@event}); } Console.WriteLine("Took {0} milliseconds to playback events",(DateTime.Now - startedApplyingEventsAt).TotalMilliseconds); foreach (var activity in ar.Activity) { Console.WriteLine(activity); } }