Just wanted to say thanks for all of this info. A co-worker introduced me to this concept and, as I am a bit of a junior developer, the whole thing went over my head. These documents have made everything so much clearer. Thank you.

Thanks for great work and time you have invested on getting all these info explained and available for everyone. I am new to this concept and going through document and video. I am getting really confused with term “aggregate”. For me aggregate is sum groups in SQL :P. I am tying to understand what aggregate represent to in CQRS. Can you plz have this term explained bit more detail?

Thanks for last reply, that helped a lot. I was looking all week trying to understand concept and looked some implementations and got one sample created with nCQRS.

I have created a Order domain/aggregate root. Order has Line Items and Payments. Pretty simple order example with line item added, payment added events.

Now when I get AddLineItemCommand, I need to check if this product has enough inventory. Here I got 2 questions that I am not able to get clear answer to

First, where I should have this inventory check- with in Order domain object?
Second, Where it should look for inventory value – Product domain or read model?

I was thinking to have a ProductSold command executed on product domain from Order domain. If this command success, I add line item to order otherwise not. Now question is, is domain execute command on other domain is allowed/good practice?

Thanks for these docs, I thought they provide a quick read but still got across the salient points, well done.

re: Aggregate – not be confused with a boundary though. A simple example, might be a Person Aggregate that contains/associated with a Contact Object and an Address Object. External clients can only deal with Person not Contact or Address. So it’s aggregating the other objects into a single client facing component – at least that how I like to think of it!

Dear Greg,
Can you please provide your openion a very typical scenario that arises in all e-commerce application. I have a ShoppingCart AggregateRoot along with ShoppingCartLineItem as entity managed by ShoppingCart. Once the user proceeds to checkout, an Order AggregateRoot object should be created which will manage OrderLineItem objects per ShoppingCartLineItem. Since in Cqrs world, we keep the object state private and only expose behavioral methods which operate on the object state and we don’t keep public properties to expose an aggregate/entity object state, we will have to ask ShoppingCart aggreate root for the state or data that’s required to create Order aggregate and Orderlineitems which ShoppingCart will be return as valueobject(s) which can have public readonly properties so Order aggregate object could be passed this state/data from a command handler.

Is this the way this very normal scenario should be handled or is there some better way of doing it as well? Please provide your feedback over it.