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?
ProductPage, with both page details (title, url, content) and product/ecommerce details (eg. sku, price, photos). Write side, when dealing with the page, it should share logic and functionality with all other pages, not caring that there is also product information attached to the ID. Similarly, product/ecommerce functionality (pricing, ordering, shipping, etc) doesn't care about content, url, or other Page concerns.Customer,Address,Invoice, andInvoiceLineItemtables.