Date post: | 17-Jan-2017 |
Category: |
Technology |
Upload: | tomasz-wojcik |
View: | 273 times |
Download: | 0 times |
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?
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?
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
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
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
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