+ All Categories
Home > Technology > CQRS & Event Sourcing

CQRS & Event Sourcing

Date post: 17-Jan-2017
Category:
Upload: tomasz-wojcik
View: 273 times
Download: 0 times
Share this document with a friend
25
CQRS … AND EVENT SOURCING 03
Transcript

CQRS

… AND EVENT SOURCING

03

CQRS EVENT SOURCING

… AND CQRS … AND EVENT SOURCING

03

IN LAYMAN’S TERMS:

IT’S ALL ABOUT HANDLING MAKING CHANGES (TO THE DATABASE)

03

www.docplanner.com

HOW CHANGE LOOKS LIKE

STATE A

STATE B!

"

!

MUTATE

#READ

$WRITE

DATABASET R A N S I T I O N

www.docplanner.com

PROBLEMS OF STANDARD APPROACH

WHAT WAS THE A STATE? HOW ENTITY CHANGES OVER TIME?

WHO MADE THE TRANSITION? WHO WAS ENVOLVED IN MAKING CHANGES TO ENTITY OVER TIME?

WHEN WAS THE TRANSITION MADE?HOW MANY TIMES ENTITY CHANGED?

WHAT HAS ACTUALLY HAPPENED?WHAT WERE THE TRANSITIONS OVER TIME AND WHY THEY HAPPENED?

WHAT WOULD WE NORMALLY DO?

03

www.docplanner.com

LOG CHANGES IN SEPARATE TABLE(S)

"

STATE A

STATE B

!

!

&

ENTITIES

CHANGESMUTATE&

& &

& &#

READ

$WRITE

www.docplanner.com

PROBLEMS OF LOGGING CHANGES ONLY

WE STILL DON’T KNOW WHAT HAS HAPPENED WE KNOW TRANSITIONS … BUT WHAT ARE THE INTENTS?

WHAT PART OF THE SYSTEM MADE THE CHANGE?WAS IT A HUMAN OR AN AUTOMATED SYSTEM (WHICH ONE)?

WHAT WAS THE MUTATION? STORING MUTATION AND STATE IS REDUNDANT

WHAT HAPPENS WHEN DELETING AN ENTITY? SHOULD WE DELETE LOGS TOO?

03

03

EVENT SOURCING TO THE RESCUE!

www.docplanner.com

LET’S RECOGNISE THINGS

ENTITY

INTENT / TRANSITION

MUTATION

“STANDARD APPROACH” EVENT SOURCING

AGGREGATE CACHED STATE#

EVENT#

EVENT DATA#

www.docplanner.com

EVENT SOURCING

"

STATE A

STATE B

!

!

ENTITIES

MUTATE&#

READ

$WRITE

EVENTS

&& &

www.docplanner.com

RECAP: PROBLEMS OF STANDARD APPROACH

WHAT WAS THE A STATE? HOW ENTITY CHANGES OVER TIME?

WHO MADE THE TRANSITION?WHO WAS ENVOLVED IN MAKING CHANGES TO ENTITY OVER TIME?

WHEN WAS THE TRANSITION MADE?HOW MANY TIMES ENTITY CHANGED?

WHAT HAS ACTUALLY HAPPENED?WHAT WERE THE TRANSITIONS OVER TIME AND WHY THEY HAPPENED?

SOLVED

SOLVED

SOLVED

SOLVED

www.docplanner.com

RECAP: PROBLEMS OF LOGGING CHANGES ONLY

WE STILL DON’T KNOW WHAT HAS HAPPENED WE KNOW TRANSITIONS … BUT WHAT ARE THE INTENTS?

WHAT PART OF THE SYSTEM MADE THE CHANGE?WAS IT A HUMAN OR AN AUTOMATED SYSTEM (WHICH ONE)?

WHAT WAS THE MUTATION? STORING MUTATION AND STATE IS REDUNDANT

WHAT HAPPENS WHEN DELETING AN ENTITY? SHOULD WE DELETE LOGS TOO?

SOLVED

SOLVED

SOLVED

SOLVED

HOW TO ACHIEVE THIS?

03

WITH THE HELP OF … CQ(R)S

www.docplanner.com

COMMAND QUERY SEGREGATION

WRITES READS

ALLOWED TO MUTATE STATE DISALLOWED TO MUTATE STATE

RETURN VOID TYPE RETURN NON-VOID TYPE

COMMANDS QUERIES

! !

WRITE MODELS READ MODELS

CQRS

“IS SIMPLY THE CREATION OF TWO OBJECTS WHERE THERE WAS PREVIOUSLY ONE”

03

www.docplanner.com

COMMON ARCHITECTURE

BUS $

HANDLER 1HANDLER 2

…HANDLER N

#

HANDLER 1HANDLER 2

…HANDLER N

COMMAND HANDLERS QUERY HANDLERS

COMMAND = EVENT INPUT = DATA OUTPUT = READ MODEL

M I D D L E W A R E S

WE ARE ALREADY USING “CQRS” YOU KNOW …

03

USE CASES

www.docplanner.com

ALTERNATIVES

SIMPLEBUS/MESSAGEBUS MATTHIAS NOBACK

THEPHPLEAGUE/TACTICIANTHE PHP LEAGUE

QANDIDATE_LABS/BROADWAYQANDIDATE LABS

BEBERLEI/LITECQRS-PHPBENJAMIN EBERLEI

www.docplanner.com

USAGE

COMMAND HANDLERS QUERY HANDLERS

$bus = $this ->getContainer() ->get('bus');

$cmd = new AcceptOpinion($id, $uId); $bus->handle($command);

$bus = $this ->getContainer() ->get('bus');

$query = new GetLatestOpinions(15); $result = $bus->handle($query);

www.docplanner.com

CQRS PROS & CONS

PROS CONS

UNIFIED ENTRY POINT

ARCHITECTURE AGNOSTIC

COMPLICATING LOGIC

OUT–OF–BOX SRP

HARDER MAINTENANCE

UNPLANNED MUTATION GIVESUNDESIRED BEHAVIORS

CAN EXTRACT AN API … YAY :)

EASIER TO CACHE READS

www.docplanner.com

RECOMMENDATION

youtube.com/watch?v=JHGkaShoyNsby GREG YOUNG

QUESTIONS?

03

github.com/prgTW

linkedin.com/in/prgTW

03


Recommended