2. Who am I?
• Maurice de Beijer
• The Problem Solver
• Microsoft Azure MVP
• Freelance developer/instructor
• Twitter: @mauricedb and @React_Tutorial
• Web: http://www.TheProblemSolver.nl
• E-mail: maurice.de.beijer@gmail.com
2
The server is often just a simple gateway with just some validation logic
There is nothing wrong with a CRUD application if the problem domain is simple
http://www.flickr.com/photos/juhansonin/5144239690
A basic React component to show a list of permits
CQRS = Command Query Responsibility Segregation
Use a different model to update information than the model you use to read information
http://www.flickr.com/photos/usnavy/8220344431
Commands should be modeled after business actions
A business user can understand command names and have a reasonable expectation of the outcome
http://www.flickr.com/photos/micahdowty/4630801442
Still storing just the current state
Database structure is often normalized and optimized for updating
Most application read far more frequently then update
The JavaScript command to send to the server
Using Flux Standard Actions
We are still storing only the current state
No trace of how we got there
http://www.flickr.com/photos/danrocha/15602018982
Event Sourcing is a very old idea that has become popular again over recent years.
Invented by Greg Young
Events provide insight into how the system came to be in its current state
The current state is a left fold of the events
http://www.flickr.com/photos/dragontomato/5174914835
Fra Luca Bartolomeo de Pacioli (1447–1517) The Father of Accounting and Bookkeeping
https://en.wikipedia.org/wiki/Luca_Pacioli
Domain Event is something that has happened in the past
The result of a Command to change something
Very similar to the audit trail in a database
http://www.flickr.com/photos/lendingmemo/11747440176/
Invented by Greg Young
No longer storing the current state but all event leading up to it
The current state is a left fold of all events
The projection parts are not really part of ES but CQRS and usually combined
Another service subscribes to the same events
And pushes them to each connected client
Flux has a very similar and explicit way of working with data.
Events are never erased or updated
An append only model
http://www.flickr.com/photos/horiavarlan/4263326117
Events are projected out to the read model
Observed facts = events
Derived facts = projections
http://www.flickr.com/photos/fotnmc/7172465908
A Redux reducer function for a collection of permits.
It calls another reducer for individual permits
Very functional: Old State + Action = New State
A Redux reducer function for a single permit.
The Redux createStore() function creates the store based on the reduce functions.
The React-Redux Provider connects the store state to the root App component.
The React-Redux connect functions makes data from the store available as props for the child React component.
More info:
Greg Young: http://goodenoughsoftware.net/
Martin Fowler: http://martinfowler.com/eaaDev/EventSourcing.html
Daniel Whittaker: http://danielwhittaker.me/tag/event-sourcing/
João Bragança: https://github.com/thefringeninja/derp.inventory
Damian Hickey: http://dhickey.ie/?tag=/Event-Sourcing
https://www.flickr.com/photos/stevendepolo/4582437563/