Tuesday, October 19, 2010

Event Sourcing and State Derivation

One of the most interesting aspects of the CQRS architecture is the ability to use event sourcing within your business applications. Representing all state changes as domain events has various benefits, not in the least being able to look back upon historical data to derive new information.

However, although historical information is nice, every system must also know its current state. Accessing the current state in traditional applications is just a database lookup. Can we do this in an event-based systems without adding a lot of complexity?

Saturday, April 24, 2010

CQRS presentation for the Dutch DDD User Group is now available

Monday, March 1st 2010 I gave a presentation on Command-Query Responsibility Segregation (CQRS) at the Dutch DDD User Group. There were about two or three times more people there compared to the previous meetup, probably due to the presence of Greg Young, who provided many useful insights during the discussions.

The main part was recorded and is now available on YouTube. The slides are also available. For ease of viewing (and to work around YouTube's 10 minute limit) the presentation has been split up into the following parts:

  1. Introdution and background
  2. From three tier to CQRS
  3. Events
  4. Event sourcing and reporting
  5. Domain versus reporting logic
  6. Encapsulated domain model
  7. (A)synchronous
  8. Event sourcing versus object-relational mapping
  9. Event sourcing versus object-relational mapping, auditing, and history
  10. Command and event design
  11. System integration, performance, and scalability
  12. Testability, storing commands, and production support

Monday, December 14, 2009

CQRS: The Domain - Design Options

When using the Command-Query Responsibility Segregation architecture the domain is solely responsible for executing update behavior.

Removing the query responsibility from your domain code enables new ways of designing and implementing the domain. The only additional requirement is that your domain must raise domain events so that the query database (and other interested parties) can be kept up-to-date.