Cqrs in babysteps
-
Upload
erik-talboom -
Category
Technology
-
view
2.787 -
download
0
Transcript of Cqrs in babysteps
Command Query Responsibility Segregation
In Babysteps
@talboomerik
Founder of Software craftsmanship guild Belgium
@talboomerik
Thanks to
@yreynhout @alastairs
@sandromancuso @adibolb
And a special thanks to@StefanBilliet
ENTRY LEVEL INTRODUCTION
@talboomerik
WHERE DID IT COME FROM?A little history
@talboomerik
Command and Query Separation
It states that every method should either be a command that performs an action, or a query that returns data to the caller, but not both. In other words, asking a question should not change the answer. More formally, methods should return a value only if they are referentially transparent and hence possess no side effects.
Wikipedia - Bertrand Meyer
@talboomerik
IF YOU HAVE A RETURN TYPE, YOU SHOULD NOT CHANGE STATE
Query
@talboomerik
IF YOU CHANGE STATE YOUR RETURN TYPE SHOULD BE VOID
Command
@talboomerik
BASICALLY CQRS IS CQS SPLIT IN DIFFERENT OBJECTS
The simple definition
@talboomerik
QUERY OBJECTS OVER QUERY SERVICES / REPOSITORIES
http://lostechies.com/jimmybogard/2012/10/08/favor-query-objects-over-repositories/@talboomerik
WHAT IS THIS ALL ABOUT?What’s the fuss
@talboomerik
YOUR TYPICAL N-TIER ARCHITECTURE
@talboomerik
http:
//co
deof
rob.
com
/ent
ries/
cqrs
-is-t
oo-c
ompl
icat
ed.h
tml
REMEMBER WHAT UNCLE SANDRO SHOWED US?
FEELS FAMILIAR?
@talboomerik
WE CAN MAKE THIS SIMPLER
@talboomerik
http:
//co
deof
rob.
com
/ent
ries/
cqrs
-is-t
oo-c
ompl
icat
ed.h
tml
REMOVING QUERIES FROM YOUR DOMAIN MODEL
@talboomerik
@sandromancuso
@sandromancuso
LET’S TAKE IT ONE STEP FURTHERIf needed
@talboomerik
http:
//co
deof
rob.
com
/ent
ries/
cqrs
-is-t
oo-c
ompl
icat
ed.h
tml
OR EVEN FURTHERIf applicable
@talboomerik
http:
//co
deof
rob.
com
/ent
ries/
cqrs
-is-t
oo-c
ompl
icat
ed.h
tml
HOW TO SYNCHRONIZE READ/WRITE?
@talboomerik
DOMAIN EVENTSA cool pattern
@talboomerik
LET’S HAVE A LOOK AT SOME CODE
@talboomerik
TAKING IT TO ANOTHER LEVELEvent sourcing
@talboomerik
FOCUSING ON BEHAVIOR INSTEAD OF STATE
@talboomerik
http:
//co
deof
rob.
com
/ent
ries/
cqrs
-is-t
oo-c
ompl
icat
ed.h
tml
SOME MISCONCEPTIONS ABOUT CQRS
@talboomerik
CQRS <> DDDIt’s not the same
@talboomerik
CQRS <> EVENT SOURCINGThey just go well together
http://lostechies.com/jimmybogard/2012/08/22/busting-some-cqrs-myths/ @talboomerik
CQRS CAN HAVE AN IMMEDIATE CONSISTENT READ STORE
http://lostechies.com/jimmybogard/2012/08/22/busting-some-cqrs-myths/ @talboomerik
CQRS DOES NOT FORCE YOU TO USE A BUS
http://lostechies.com/jimmybogard/2012/08/22/busting-some-cqrs-myths/ @talboomerik
COMMANDS DO NOT NEED TO BE FIRE-AND-FORGET
Accepting the request vs Fulfilling the request
http://lostechies.com/jimmybogard/2012/08/22/busting-some-cqrs-myths/ @talboomerik
WHY IS THIS A GOOD IDEA?Pros and cons
@talboomerik
SIMPLER DOMAIN MODELBy splitting
@talboomerik
BETTER SEPARATION OF CONCERNS AND RESPONSIBILITIES
@talboomerik
SCALABILITYTechnical and team
@talboomerik
COMPLETE REBUILD OF THE APPLICATION STATE THROUGH EVENT SOURCING
http://martinfowler.com/eaaDev/EventSourcing.html@talboomerik
TEMPORAL QUERYINGReplay history
http://martinfowler.com/eaaDev/EventSourcing.html@talboomerik
AUDIT LOGI see you
http://martinfowler.com/eaaDev/EventSourcing.html@talboomerik
IT DOES REQUIRE “SOME” WORK UPFRONT
Set up infrastructure
@talboomerik
IT WORKS BEST WITH TASK-BASED UI
Delivery mechanism and domain architecture need to collaborate
IT IS NOT EASYIt’s a big shift from what we are used to
@talboomerik
HOW CAN WE GET THIS DONE?Code, show us code
@talboomerik
THANK YOUThat’s all folks
@talboomerik