Você pode exibir o nível de inventário na página da Web ou exibir o número de edição do inventário em estoque (imagine que seu inventário seja livros, revistas etc.). Essas informações são do domínio Inventário.
O principal a ser observado neste momento é que você está falando sobre uma exibição, ou seja, o uso de dados obsoletos é aceitável.
Dito isto, você não precisa interagir com os agregados (responsáveis por impedir que alterações violem os invariantes dos negócios), mas com uma representação de uma cópia recente do estado do agregado.
Então, o que eu normalmente esperaria é uma consulta executada no Catálogo de Produtos e outra no Inventário, e algo para compor os dois no DTO que você precisa para dar suporte à exibição.
Carregar os domínios de produto e de inventário?
Então está perto . Não precisamos carregar os agregados, porque não vamos mudar nada. Mas precisamos do estado deles; para que pudéssemos carregar isso. Dito isso, eu normalmente esperaria que os dois domínios estivessem sendo executados em processos diferentes. Portanto, estaríamos chamando os dois, não carregando os dois.
Você manteria algumas propriedades em sua entidade de domínio do Produto para número em estoque e edição em estoque e usaria Eventos de Domínio para atualizá-las quando a entidade Inventário for atualizada?
"Não atravesse as correntes. Seria ruim."
Usando eventos para coordenar informações entre contextos de domínio: ótima idéia. Empurrando conceitos que pertencem a um domínio para outro: o oposto de uma ótima idéia, exceto mais.
Você deseja manter os domínios limpos. Os aplicativos que interagem com os domínios não são tão importantes. Por exemplo, é razoável que o aplicativo Inventory chame um serviço no aplicativo do produto para consultar alguns conceitos específicos do produto para adicionar a uma exibição. Ou vice-versa.
Não sei por que motivo um único aplicativo precisa ser restrito a um único domínio. Enquanto houver uma única fonte de verdade, você poderá distribuir as transações da maneira que desejar.
Mas, só para pensar nisso, no exemplo acima, teríamos potencialmente 2 tabelas de banco de dados para catálogo e inventário de produtos. Agora, usamos o mesmo identificador neles, pois é o mesmo produto.
Essa seria a maneira mais fácil. Em termos maiores, você usa o mesmo identificador porque a entidade do mundo real é a mesma; os dois contextos limitados diferentes modelam essa entidade de maneira diferente, mas o modelo não é a entidade do mundo real.
Quando isso não funcionar, você precisará de algumas consultas para preencher a lacuna. Eu acho que a variação mais comum disso é que a entidade mais nova preserva o id da entidade mais antiga. Você também verá isso em um único BC: os candidatos, quando aprovados, tornam-se clientes. É um agregado diferente (o estado associado a um cliente está sujeito a uma invariante diferente da do candidato); portanto, se sua camada de persistência estiver usando fluxos de eventos, o fluxo para o novo agregado precisará de um identificador diferente. Portanto, haverá um pouco de estado em algum lugar que diga "esse candidato se tornou esse cliente".
Ou, podemos usar 1 tabela e 1 linha para os dados e simplesmente mapear os dados relevantes nas propriedades agregadas?
CARAMBA! Não faça isso. Você está adicionando contenção de transações sem qualquer motivo comercial para isso.