I am working on understanding DDD and want to see if this idea is sound, if it is common practice, and if there are any pitfalls or unforeseen complications.
I want to effectively have one “entity” with a globally unique primary key. I want to use event sourcing. I would like have different AR classes represent this “entity” depending on the context.
For example, in an ecommerce site I’d have a few different types of pages (static content pages, category pages, product pages). I’d also have products. There should be a 1:1 mapping between a product and a product page, effectively a ProductPage
subtype of Page
with a single, unique ID representing both the Page and the Product components.
When in the content management context, I’d load all Page
events for that ID to reconstruct my Page
AR object, do any Page
related actions, and save out the appropriate Page
events (ex. Page.EditContent()
).
When in the product management context, I’d load all the Product
events for that ID to reconstruct the Product
AR object, do any Product
related actions, and save out the appropriate Product
events (ex. Product.SetPrice()
).
Then, when generating my read model, I’d load all the events for that ID to construct a ProductPage
and save it to the read model database.
Is this a correct way of going about this or is this a bad idea for some reason I can’t see? Or is there a better way?