Today was an interesting day at Microsoft TechDays 2011 in Finland.
I was aware of Command And Query Separation (CQRS) architecture, and had been interested in it before, but honestly didn’t have time to educate myself about it.
Today I saw Pasi Taive’s excellent presentation and demonstration of a simple case about it, special thanks to Mikko Hytti as well for lecturing about the basics prior Pasi’s presentation. That was well enough (especially when I “stole” Pasi’s example to serve as a baseline) to push me over the edge and made me create first abstraction over CQRS.
Although it’s been claimed, that CQRS “is no silver bullet” and “does not suit everywhere” I will challenge those claims. CQRS is actually quite simple. And hence considering the features it provides, it’s astonishingly beautiful, particularly when combined with event sourcing.
Its only problem is that it requires relatively lot of ceremonial code to get the work done. But it is not complex.
The thing that really got my attention, was the basic ground idea of CQRS. It focuses on the “intention of doing something”. Why this is particularly interesting is, that we have been pondering how to approach the standard-mobile-phone user being able to make software.
The key here is that logically all software and applications boil down to the end-user’s intention of doing something. CQRS with event sourcing provides the ultimate architecture of staying as-simple as possible while being able to backdate updates (as long as the entire event-history is kept). As long as the intention is catched properly, the entire software can be restructured.
Entering the world of abstractions, we have all the tools available to provide multiple parallel universes of reality around the one concrete pile of intentions stored in the event store.
If for some reason CQRS fails to deliver on some particular need, I will want to understand the case. Until then I’ll start the task of proving it actually is the silver bullet. Abstractions are the technology to enable it, but the actual silver bullet is the architecture that is being served through the abstractions.
I’ll post relatively soon the update publishing the abstractions and inviting anyone to participate. I’ll make example video of using the CQRS abstraction as well as examples of modifying it to provide basis for anyone to attend.