At work, an initiative to implement some CQRS style architecture for some of our projects subsystems has begun. We were looking at ways to horizontally scale our system and a colleague suggested that we look at CQRS and Event Sourcing. Over the last month, we have researched the topic, spiked out the implementation, and started migrating some parts of our bounded contexts to make use of the architecture.
Below is a list of links to white papers, blog posts, sample applications, and other information on CQRS and Event Sourcing. There are not listed in any particular order:
I just finished reading Domain-Driven Design by Eric Evans. Overall, it is a great book. The complex topic of domain-driven design is tackled and explained exceptionally well. In addition, the companion web site supplements the text very well by allowing quick access to definitions and provides a community for discussion regarding the text and topic. The only draw back I encountered in the text was feeling that some fundamental topic discussions were a bit long winded. This may have been just because of my experience in the software engineering and architecture arena. However, that drawback is minimal as the discussions restated important concepts clearly and reinforced them.
There are several notable characteristics in this book. The very first thing that comes to mind when I am asked why I found this book helpful is the way the author covered the topic from both an academic point of view and then distilled the key concepts using practical tried and true design patterns which have been documented in various notable texts by accomplished technologists. The domain-driven design approach marries itself well to agile development processes that emphasize iterative development practices. Evans made the association between the approach and the processes although there appeared to be a bias towards extreme programming.
In the end, I would definitely recommend the book to anyone who is working on projects where domain driven design principles or is interested in learning both the academic and pragmatic techniques and concepts in this area of software development.