I'm reading about Repositories in Domain Driven Design and the Microsoft patterns for micro-service architecture and they both agree that I should have one Repository per Aggregate Root. I generally agree with this, however I have a naming problem.
Aggregate is to Repository as...
Entity is to ???
Value is to ???
In my specific scenario I have a Repository for a Product object in the context of a marketing website.
Product is an Aggregate of the ProductInfo marketing information entity (Aggregate Root), List of ProductSpecs and ShippingInfo entities, along with a listing of RelatedProduct value references to other bounded contexts.
Now in my Repository I have to pull together data from different Entities and value objects to make the aggregate root.
I get the ProductInfo(root), and RelatedProducts(value) from a CMS. The ProductSpecs(entity) and ShippingInformation(entity) come from rest apis (microservices that are handling other bounded contexts).
In my first attempt I created repositories/interfaces/domain pocos for all the Entities, then had the UI layer map them to viewmodels for display. Essentially making an Aggregate per Entity, however the Entities are shaped like Data Access Objects (because at this point they are), and those concerns are leaking into my domain. If and when we depreciate the Shipping Api and migrate that into the CMS I'll have to delete and update the repositories/interfaces then go update everything in the UI layer that touches those all because I changed the location of where I was storing something.
My current attempt is to make the Aggregate a bit larger to better represent how the system is using the object rather than how it's stored, but I feel like I'm getting stuck on what to name the classes that supply the entities and values and how to architect it.
I want my CMS, and Api query logic in separate projects/dlls so they can be reused, I want a repository that combines the data access objects to create aggregates. What do I call the classes in the CMS and Api query projects? Is there a name for a pattern that I should be using?