Até hoje, sempre implementei controle de estoque da seguinte maneira (de uma forma simplificada):
Tenho as tabelas de produtos, entradas, vendas, e uma tabela contando todo o histórico de movimentação do estoque. Esta tabela de movimentação tem um campo para o id do produto, um campo para dizer se a movimentação foi uma entrada ou saída, um campo para a quantidade e outro para o saldo.
Quando entra um produto, uma trigger no banco insere um registro na tabela de movimentações referente à entrada, e na tabela de vendas uma trigger similar.
Na tabela de movimentação, tenho uma trigger que atualiza toda a tabela sempre que um novo registro é inserido. Ou seja, quando registro uma movimentação de estoque, pego todos os registros já existentes referentes ao mesmo produto, com data maior que a data do registro sendo inserido, e atualizo o saldo neles.
Pois bem… Segundo o DDD, qual seria a forma mais adequada de implementar isso?
Eu teria um repositório para movimentações de estoque? E aí ao gravar um registro, esse mesmo repositorio ficaria encarregado de carregar as outras movimentações, atualizar o saldo nelas e gravar novamente?