I would disagree with that quite a bit. In most complex environments,
what "can be done" today may not be done tomorrow. What cannot be done
today can be a mere warning tomorrow. What can be atomically
consistent today may not be possible tomorrow (due to much more data,
users, collaboration etc.). In CRUD you have to agree up front about a
data model that is supposed to suit all future requirements and
changes to that mean complex migration. With event sources, changes
driven by the business regarding rules and what not do not affect any
of that. Infrastructure and business processing is separated and
there's more freedom to evolve either or both orthogonally.
By CRUD I assumed the classical MVC model without a real app layer (Controllers accessing the DB directly etc).In my experience this is quite the opposite of the approach you use with DDD/CQRS.
MVC is typically a web-based pattern (at least recently).
CQRS refers to having the responsibilities of commands and queries
segregated - i.e. they should be not be done by the same thing. Using
two separate stores is an option but not necessary.
There seems to be an increasing amount of topic added to "cqrs".
So far, my personal definition (based IIRC on one of Greg's conference
talks) was "two models where previously was only one", one optimized for
transaction and one for read/query access, where the second model is a
deterministic function of the first.
You can do that with PHP, no problem :)
Cheers
Phil
--
Le doute n'est pas une condition agréable, mais la certitude est absurde.
There seems to be an increasing amount of topic added to "cqrs".So far, my personal definition (based IIRC on one of Greg's conference talks) was "two models where previously was only one", one optimized for transaction and one for read/query access, where the second model is a deterministic function of the first.
You can do that with PHP, no problem :)
Cheers
Phil
I think much of the benefit of CQRS lies in the business value inherent in the domain portion of the project, not necessarily the different storage implementations. Albeit, I usually have seperated read and write stores, but CQRS doesn't require that. The data store is largely an implementation detail I can distill the same data store into a write model and read model at the same time, making the benefit to be driven by the behaviour of each of those models rather than the data store underneath.
--
Oh, I agree. I always separate the stores. However, I'm just saying that it isn't a requirement and that the main benefit of CQRS (for me and my team) was the behavioral aspects of it. The optimized read and write data stores were just an extra benefit.
Hi,
Some time ago I wrote a couple of blog posts on the DDD-part of this question.
http://se-thinking.blogspot.com/2011/10/is-domain-driven-design-always.html
http://se-thinking.blogspot.com/2011/10/value-of-using-domain-driven-design.html
Jörgen
@ashic:
IOW, ORM for the write side and direct sql connection on the read side :)