© copyright 2010 imaginet. all rights reserved. distributed architecture patterns cqrs & event...

36
© Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

Upload: randell-burke

Post on 16-Jan-2016

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© 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

© 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

© 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

© 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

© 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

© Copyright 2010 Imaginet. All rights reserved.

Sample Read Data Model

Page 7: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© 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

© 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

© 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

© Copyright 2010 Imaginet. All rights reserved.

Event Store Data Model

Page 11: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Page 12: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Command

Page 13: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Event

Page 14: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Command Handler

Page 15: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Domain Object

Page 16: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Event Handler

Page 17: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Query Handler

Page 18: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Data Transfer Object

Page 19: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Page 20: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

vs

Page 21: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Scalability

Page 22: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Page 23: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Page 24: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Sample Unit Test

Page 25: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Sample Unit Test #2

Page 26: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Page 27: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Page 28: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© 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

© Copyright 2010 Imaginet. All rights reserved.

Page 30: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Page 31: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

Page 32: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© Copyright 2010 Imaginet. All rights reserved.

NoSQL Databases

Page 33: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© 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

© Copyright 2010 Imaginet. All rights reserved.

Recommended Reading

Page 35: © Copyright 2010 Imaginet. All rights reserved. Distributed Architecture Patterns CQRS & Event Sourcing

© 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

© Copyright 2010 Imaginet. All rights reserved.

Questions?