+ All Categories
Home > Documents > Event Sourcing

Event Sourcing

Date post: 22-Feb-2016
Category:
Upload: earl
View: 61 times
Download: 1 times
Share this document with a friend
Description:
Event Sourcing. Cameron Fletcher. Agenda. What is an Event? Events as a Storage Mechanism Versioning Testing with Events Performance and Scalability Demonstration. What is an Event?. An Event. - PowerPoint PPT Presentation
27
Event Sourcing Cameron Fletcher
Transcript
Page 1: Event Sourcing

Event SourcingCameron Fletcher

Page 2: Event Sourcing

Agenda

What is an Event? Events as a Storage Mechanism Versioning Testing with Events Performance and Scalability Demonstration

Page 3: Event Sourcing

What is an Event?

Page 4: Event Sourcing

An EventAn event is something that has happened in the past as a result of a change in state of our domain

Fill glassRequest to change state

Glass has been filledEvent

Glass is already full!

Glass is broken!Exception

Page 5: Event Sourcing

Events as aStorage Mechanism

Page 6: Event Sourcing
Page 7: Event Sourcing
Page 8: Event Sourcing

Carts

CartId HasCheckedOut1 False

CartItems

CartId ItemId Name1 1 Domain Driven Design1 2 Enterprise Integration

Patterns1 3 Event Centric

Item Added

Item Added

Item Added

Checkout Completed

Shopping Cart Created

True

Page 9: Event Sourcing

Item Added

Item Added

Item Added

Checkout Completed

Shopping Cart Created

Domain Object

Page 10: Event Sourcing

Item Added

Item Added

Item Added

Item Removed

Shopping Cart Created

Checkout Completed

Page 11: Event Sourcing

Versioning

Page 12: Event Sourcing

7

6

5

4

3

2

1

snapshot

Page 13: Event Sourcing

Cart Domain Object Example// request to mutate statepublic void Add(Item item){

if (this.itemCount > 5)throw new CartFullException(this.id);

ApplyChange(new ItemAdded(this.id, item.Name));

}

// mutate stateprivate void Apply(ItemAdded @event){

this.itemCount++;}

Page 14: Event Sourcing

Domain Object Base

protected void ApplyChange(Event @event){

this.ApplyChange(@event, true);}

private void ApplyChange(Event @event, bool isNew){

this.AsDynamic().Apply(@event);

if (isNew)this.uncommittedChanges.Add(@event);

}

Page 15: Event Sourcing

Domain Object Reconstitutionpublic void LoadFromHistory(IEnumerable<Event> history){

foreach (var @event in history)this.ApplyChange(@event, false);

}

Page 16: Event Sourcing

Domain Object Persistencepublic IEnumerable<Event> GetUncommittedChanges() {

return this.uncommittedChanges;}

public void MarkChangesAsCommitted(){

this.uncommittedChanges.Clear();}

Page 17: Event Sourcing

Testing with Events

Page 18: Event Sourcing

Overdraw Attempts are RejectedGiven

An account with a balance of 100

WhenA debit is requested for 101

ThenAn InsufficientBalanceException is thrown

Page 19: Event Sourcing

Overdraw Attempts are RejectedGiven

An account is createdA deposit was made for 100

WhenA debit is requested for 101

ThenAn InsufficientBalanceException is thrown

Page 20: Event Sourcing

Overdraw Attempts are RejectedGiven

A series of events

WhenA command

ThenZero or more events, or an exception is

thrown

Page 21: Event Sourcing

Overdraw Attempts are RejectedGiven

An account is createdA deposit was made for 100A debit is requested for 101

WhenA debit is requested for 20

ThenAn InsufficientBalanceException is thrown

Page 22: Event Sourcing

Performance and Scalability

Page 23: Event Sourcing

Performance and Scalability Benefits Append-only model Partitioning (Sharding) Persisting Objects Reconstituting Objects

Page 24: Event Sourcing

Demonstration

Page 25: Event Sourcing

Summary

Page 26: Event Sourcing

Questions?

Page 27: Event Sourcing

Recommended