events are not just for notifications
play

Events are not just for notifications Greg Young Qcon London Agenda - PowerPoint PPT Presentation

Events are not just for notifications Greg Young Qcon London Agenda Event Storage Testing With Events Versioning Performance Traveling Through Space and Time Let Everyone Run to Airport to Catch Flights Line Items (n) Purchase Order


  1. Events are not just for notifications Greg Young Qcon London

  2. Agenda Event Storage Testing With Events Versioning Performance Traveling Through Space and Time Let Everyone Run to Airport to Catch Flights

  3. Line Items (n) Purchase Order Shipping Information

  4. Cart Line Item Line Item Line Item Address Created Added Added Added Added

  5. Cart Object Cart Line Item Line Item Line Item Address Created Added Added Added Added

  6. Cart Line Item Line Item Line Item Line Item Address Address Created Added Added Added Removed Added Added

  7. New Cart Object (Looks totally different) Cart Line Item Line Item Line Item Address Created Added Added Added Added

  8. 7 6 5 4 3 2 1

  9. 6 5 snap 4 3 2 1

  10. Base { public IEnumerable<Event> GetUncommittedChanges() { return _changes; } public void MarkChangesAsCommitted() { _changes.Clear(); } public void LoadsFromHistory(IEnumerable<Event> history) { foreach (var e in history) ApplyChange(e, false); } }

  11. Base { protected void ApplyChange(Event @event) { ApplyChange(@event, true); } private void ApplyChange(Event @event, bool isNew) { this.AsDynamic().Apply(@event); if(isNew) _changes.Add(@event); } }

  12. private void Apply(InventoryItemDeactivated e) { _activated = false; } public void Deactivate() { if(!_activated) throw new InvalidOperationException("already deactivated"); ApplyChange(new InventoryItemDeactivated(_id)); }

  13. Derived { protected void ApplyChange(Event @event) { ApplyChange(@event, true); } private void ApplyChange(Event @event, bool isNew) { this.AsDynamic().Apply(@event); if(isNew) _changes.Add(@event); } }

  14. Overdraw attempts are rejected Given An account with $100 When A debit is requested for $101 Then An InsufficientBalanceException is thrown

  15. Overdraw attempts are rejected Given An account was created. An initial deposit was made for $100 When A debit is requested for $101 Then An InsufficientBalanceException is thrown

  16. Overdraw attempts are rejected Given A series of events When A command Then A series of events

  17. Not allowed to take money out of an overdrawn account Given An account was created. An initial deposit was made for $100 $100 was withdrawn When A debit is requested for $20 Then An InsufficientBalanceException is thrown

  18. Traveling Through Time.

Recommend


More recommend