About Me
					Felipe Fernández
					
				
				
					About the talk
					
						- 1. Objectives
- 2. CQS
- 3. CQRS
- 4. Event Sourcing
- 5. Related Concepts
- 6. Conclusion
Objectives
				    
				      - Single Responsability Principle
- Scalability
- Model complex domains
CQS
				    
				      - Command-query separation. Created by Bertrand Meyer
- Rethinking CRUD/REST
- Rethinking Mock/Stub
- Achieving better SRP at method level
CQRS
				    
				      - Levels of split
- No split : PostsRepository
- Split at class level : PostsReader and PostsPersister
- Split at datastore level : Writes in RDBMS and Reads in NoSQL
- Split at deployable level : Write, read and materializer services.
EVENT SOURCING
				    
				      - Append instead of update/delete in the write side
- Command vs Event
- CreatePost vs PostCreated
EVENT SOURCING BENEFITS
				    
							- Easy to create new views from scratch
- Audit
- Debugabble
- Disaster Recovery
- Unified log, same original datastore for OLAP and OLTP
RELATED CONCEPTS
				    
				      - Aggregates
- Microservices
- Devops
- Event Storming
Aggregates
				    
				      - Transactional Boundary
- Materialised from event store or write side store
- Command handler checks invariants of aggregates
- Example: Total value of unpaid orders for a customer must not exceed that customer's credit limit
- Customer credit and orders should be part of the same aggregate
- Application or datastore locks. Race conditions
Microservices
				    
				      - Write, read and materialiser deployables
- Different scalability needs
- HTTP, Message queues... Different intercommunication protocols
- Lose type safety accross services
Devops
				    
				      - Infra/ops gets more complicated
- Spinning up a local environment is harder
- Smoke tests are harder too
- Devs and ops need to collaborate more in this context
Conclusion
				    
				      - Most sofisticated solution has a steep learning curve
- It scales really well
- Bring ubiquituous language to your system seamlessly
- Super fun, but harder