Top Banner
CQRS … AND EVENT SOURCING 03
25

CQRS & Event Sourcing

Jan 17, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CQRS & Event Sourcing

CQRS

… AND EVENT SOURCING

03

Page 2: CQRS & Event Sourcing

CQRS EVENT SOURCING

… AND CQRS … AND EVENT SOURCING

03

Page 3: CQRS & Event Sourcing

IN LAYMAN’S TERMS:

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

03

Page 4: CQRS & Event Sourcing

www.docplanner.com

HOW CHANGE LOOKS LIKE

STATE A

STATE B!

"

!

MUTATE

#READ

$WRITE

DATABASET R A N S I T I O N

Page 5: CQRS & Event Sourcing

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?

Page 6: CQRS & Event Sourcing

WHAT WOULD WE NORMALLY DO?

03

Page 7: CQRS & Event Sourcing

www.docplanner.com

LOG CHANGES IN SEPARATE TABLE(S)

"

STATE A

STATE B

!

!

&

ENTITIES

CHANGESMUTATE&

& &

& &#

READ

$WRITE

Page 8: CQRS & Event Sourcing

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?

Page 9: CQRS & Event Sourcing

03

Page 10: CQRS & Event Sourcing

03

EVENT SOURCING TO THE RESCUE!

Page 11: CQRS & Event Sourcing

www.docplanner.com

LET’S RECOGNISE THINGS

ENTITY

INTENT / TRANSITION

MUTATION

“STANDARD APPROACH” EVENT SOURCING

AGGREGATE CACHED STATE#

EVENT#

EVENT DATA#

Page 12: CQRS & Event Sourcing

www.docplanner.com

EVENT SOURCING

"

STATE A

STATE B

!

!

ENTITIES

MUTATE&#

READ

$WRITE

EVENTS

&& &

Page 13: CQRS & Event Sourcing

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

Page 14: CQRS & Event Sourcing

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

Page 15: CQRS & Event Sourcing

HOW TO ACHIEVE THIS?

03

WITH THE HELP OF … CQ(R)S

Page 16: CQRS & Event Sourcing

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

Page 17: CQRS & Event Sourcing

CQRS

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

03

Page 18: CQRS & Event Sourcing

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

Page 19: CQRS & Event Sourcing

WE ARE ALREADY USING “CQRS” YOU KNOW …

03

USE CASES

Page 20: CQRS & Event Sourcing

www.docplanner.com

ALTERNATIVES

SIMPLEBUS/MESSAGEBUS MATTHIAS NOBACK

THEPHPLEAGUE/TACTICIANTHE PHP LEAGUE

QANDIDATE_LABS/BROADWAYQANDIDATE LABS

BEBERLEI/LITECQRS-PHPBENJAMIN EBERLEI

Page 21: CQRS & Event Sourcing

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);

Page 22: CQRS & Event Sourcing

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

Page 23: CQRS & Event Sourcing

www.docplanner.com

RECOMMENDATION

youtube.com/watch?v=JHGkaShoyNsby GREG YOUNG

Page 24: CQRS & Event Sourcing

QUESTIONS?

03

Page 25: CQRS & Event Sourcing

github.com/prgTW

linkedin.com/in/prgTW

03