![Page 1: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/1.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Distributed Architecture Patterns
CQRS & Event Sourcing
![Page 2: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/2.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Dylan SmithSenior ALM Consultant
Application Lifecycle Expert
PROFILEDylan is an ALM (Application Lifecycle Management) consultant for Imaginet where he spends his time helping teams become more successful at delivering software. Dylan has over a decade experience designing and architecting mission critical applications. In the past 5 years Dylan has focused on agile development techniques and practices. He has led the shift to agile and lean development practices across multiple teams, projects and companies.
“CQRS+ES differs from most design patterns in that it provides clear business benefits in addition to the obvious technical benefits.”
![Page 3: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/3.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Overview• Review Typical
Architecture• What is CQRS?• What is Event
Sourcing?• CODE !!!• Benefits / Concerns
![Page 4: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/4.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Data Storage
Domain
Object
Application Services
Remote Facade
Client
Request DTODTO Returned
Send DTOStatus Returned
Repository
Domain Object
Typical Distributed Architecture
![Page 5: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/5.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Data Storage
Domain
Object
Command Handlers
Remote Facade
Client
Request DTODTO
Returned
Send CommandAck/Nak
Response
Repository
Domain Object
Query Handlers
Remote Facade
Data Storage
CQRS
![Page 6: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/6.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Sample Read Data Model
![Page 7: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/7.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Purchase Order
Line Items (n)
Shipping Information
![Page 8: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/8.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Order Created
Added 4 Hats
Added 2 Shirts
Shipping Info
Added
![Page 9: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/9.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Event Store
Domain
Object
Command Handlers
Remote Facade
Client
Request DTODTO
Returned
Send CommandAck/Nak
Response
Repository
Domain Object
Query Handlers
Remote Facade
Data StorageEvent Bus
CQRS + ES
Event
Handle
rs
![Page 10: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/10.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Event Store Data Model
![Page 11: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/11.jpg)
© Copyright 2010 Imaginet. All rights reserved.
![Page 12: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/12.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Command
![Page 13: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/13.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Event
![Page 14: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/14.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Command Handler
![Page 15: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/15.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Domain Object
![Page 16: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/16.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Event Handler
![Page 17: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/17.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Query Handler
![Page 18: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/18.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Data Transfer Object
![Page 19: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/19.jpg)
© Copyright 2010 Imaginet. All rights reserved.
![Page 20: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/20.jpg)
© Copyright 2010 Imaginet. All rights reserved.
vs
![Page 21: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/21.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Scalability
![Page 22: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/22.jpg)
© Copyright 2010 Imaginet. All rights reserved.
![Page 23: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/23.jpg)
© Copyright 2010 Imaginet. All rights reserved.
![Page 24: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/24.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Sample Unit Test
![Page 25: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/25.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Sample Unit Test #2
![Page 26: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/26.jpg)
© Copyright 2010 Imaginet. All rights reserved.
![Page 27: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/27.jpg)
© Copyright 2010 Imaginet. All rights reserved.
![Page 28: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/28.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Client
Domain Read Model
Events
Commands DTOs
![Page 29: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/29.jpg)
© Copyright 2010 Imaginet. All rights reserved.
![Page 30: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/30.jpg)
© Copyright 2010 Imaginet. All rights reserved.
![Page 31: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/31.jpg)
© Copyright 2010 Imaginet. All rights reserved.
![Page 32: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/32.jpg)
© Copyright 2010 Imaginet. All rights reserved.
NoSQL Databases
![Page 33: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/33.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Other Topics(Time Permitting)• Event Versioning• When to use CQRS/ES?• Using CQRS or ES separately• Concurrency• Eventual Consistency• Asynchronous Commands
![Page 34: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/34.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Recommended Reading
![Page 35: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/35.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Sample CodeSuper Simple CQRS Example
github.com/gregoryyoung/m-r
NCQRS ncqrs.org
The CQRS Kitchenthecqrskitchen.codeplex.com
Lokad-CQRScode.google.com/p/lokad-cqrs
Fohjingithub.com/MarkNijhof/Fohjin
![Page 36: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing](https://reader035.vdocuments.us/reader035/viewer/2022062301/56649edb5503460f94beb0a9/html5/thumbnails/36.jpg)
© Copyright 2010 Imaginet. All rights reserved.
Questions?