Are you not always fully aware of how to create a CQRS-based application?
Itamar Ravid at Scalapeño gave us a look into implementing CQRS and ES in a purely functional manner and how it is nothing more than activating the data types and type classes already written!
Traversals and Scans and CQRS, oh my!
Command/Query responsibility separation and event sourcing are two great patterns for structuring microservices. They are a natural fit for architectures based around Kafka and Streams, and help us achieve immutability and replaybility for our data. However, it's not always clear *how* you should create a CQRS-based application, and where do all the moving parts fit.
In this talk, I will show how implementing CQRS and ES in a purely functional manner. We'll see how doing this is nothing more than activating the data types and type classes already written for us: we'll use traversable functors and the State and Writer monads to elegantly construct the components that we need. We'll also touch the pitfalls here and how to integrate these components with a streaming library such as Akka Streams.