© copyright 2010 imaginet. all rights reserved. distributed architecture patterns cqrs & event...
TRANSCRIPT
© Copyright 2010 Imaginet. All rights reserved.
Distributed Architecture Patterns
CQRS & Event Sourcing
© 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.”
© Copyright 2010 Imaginet. All rights reserved.
Overview• Review Typical
Architecture• What is CQRS?• What is Event
Sourcing?• CODE !!!• Benefits / Concerns
© 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
© 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
© Copyright 2010 Imaginet. All rights reserved.
Sample Read Data Model
© Copyright 2010 Imaginet. All rights reserved.
Purchase Order
Line Items (n)
Shipping Information
© Copyright 2010 Imaginet. All rights reserved.
Order Created
Added 4 Hats
Added 2 Shirts
Shipping Info
Added
© 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
© Copyright 2010 Imaginet. All rights reserved.
Event Store Data Model
© Copyright 2010 Imaginet. All rights reserved.
© Copyright 2010 Imaginet. All rights reserved.
Command
© Copyright 2010 Imaginet. All rights reserved.
Event
© Copyright 2010 Imaginet. All rights reserved.
Command Handler
© Copyright 2010 Imaginet. All rights reserved.
Domain Object
© Copyright 2010 Imaginet. All rights reserved.
Event Handler
© Copyright 2010 Imaginet. All rights reserved.
Query Handler
© Copyright 2010 Imaginet. All rights reserved.
Data Transfer Object
© Copyright 2010 Imaginet. All rights reserved.
© Copyright 2010 Imaginet. All rights reserved.
vs
© Copyright 2010 Imaginet. All rights reserved.
Scalability
© Copyright 2010 Imaginet. All rights reserved.
© Copyright 2010 Imaginet. All rights reserved.
© Copyright 2010 Imaginet. All rights reserved.
Sample Unit Test
© Copyright 2010 Imaginet. All rights reserved.
Sample Unit Test #2
© Copyright 2010 Imaginet. All rights reserved.
© Copyright 2010 Imaginet. All rights reserved.
© Copyright 2010 Imaginet. All rights reserved.
Client
Domain Read Model
Events
Commands DTOs
© Copyright 2010 Imaginet. All rights reserved.
© Copyright 2010 Imaginet. All rights reserved.
© Copyright 2010 Imaginet. All rights reserved.
© Copyright 2010 Imaginet. All rights reserved.
NoSQL Databases
© 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
© Copyright 2010 Imaginet. All rights reserved.
Recommended Reading
© 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
© Copyright 2010 Imaginet. All rights reserved.
Questions?