Thought's on Greg Youngs Command/Query Separation

I really enjoyed watching this video on domains and command/query separation:

http://www.infoq.com/presentations/greg-young-unshackle-qcon08

Here are the short quotes that had the greatest meaning to me:

  • State transitions are an important part of our problem space and should be modeled within our domain.
    • My thoughts: instead of an application being data-driven, and application becomes scenario- or use case-driven.
  • You know your audits are complete if you can rebuild your current state exactly and solely from the audit.
  • Entities can be represented in the traditional way, or as a series of events that happened.
    • Greg mentioned "rolling snapshots" as an answer to the obvious, "what about performance" question.
  • Separate the Create, Update and Delete from the Restore.
    • "A single model cannot be appropriate for reporting, searching, and transactional behaviors."
    • My thoughts: I have certainly experienced these tradeoffs: designs I've chosen to make the transactional behavior easier often result in it being more difficult to report and search on that data.
  • Clients need data in a model that's different than the domain model.
    • Queries should query data directly rather than through the domain. This eliminates the need for domain entities to be so full of getters and setters.
    • Have a reporting server. By the way, all queries are reports.

Comments !

links

social