Pergunta

Minha pergunta está relacionada a este .Enquanto a pergunta e respostas relacionadas mostram por que queremos separá-los, eu queria ter certeza de que minha compreensão da intenção estava correta.Em todos os exemplos que vi, parece que a intenção de um comando é que ele pode ser rejeitado e atualiza o objeto na memória e o evento atualizará o banco de dados.Agora sei que sou grosseiramente simplificando aqui, mas é correto entender que os comandos são destinados a atualizar a memória e os eventos atualizarem o DB?Se não, alguém poderia, por favor, esclarecer para mim.

Estou tentando aprender esses padrões e é assim que estou agarrando até agora e quero ter certeza de que está correto.Agradecemos antecipadamente.

Foi útil?

Solução

Sua compreensão está correta.

comandos são emitidos em relação ao modelo de domínio e pedem um comportamento específico.O modelo de domínio verifica se a execução é permitida e se comporta de acordo. comandos pode ser visualizado como um caso de uso específico que deve ser executado.

eventos Por outro lado, basta anunciar que algo já aconteceu (eles não podem ser rejeitados, pois você não pode mudar o passado.)

Com base nesses eventos, sua inscrição (bem como outros aplicativos em um cenário de integração) pode reagir de acordo com a atualização do banco de dados do modelo de leitura.

Especificamente quando o padrão Sourcing de eventos é aplicado, então os eventos são o que está sendo armazenado e repetido para reidratar seu modelo de domínio quando necessário.

Outras dicas

Primeiro, não acho que você acabe a simplificá-lo. É um conceito simples.

Comandos informam que seu aplicativo para fazer alguma coisa.

Eventos anunciam ao mundo que você fez alguma coisa.

Se a sua inscrição não puder fazer o que é dito para fazer (por causa de regras de negócios ou algum outro motivo), não faz isso. E por sua vez não anuncia nada. Se isso fizer algo, então ele a anuncia através de um evento.

Se alguém estiver inscrito nesses eventos, e se importar quando ocorrerem, eles podem atualizar sua inscrição com os dados no evento.

Na prática, isso geralmente significa que seu modelo de leitura subscreve os eventos e atualiza-se de acordo.

Tome a criação de um usuário. Você emita um usuário_createCommand que contém informações sobre um usuário. O manipulador de comando criaria então um novo objeto, esse objeto sendo um usuário e salvá-lo no repositório. Criando o usuário dispara A User_CreatedEvent que será tratado pelo seu modelo de leitura e o modelo de leitura será atualizado. Qualquer outro sistema que escuta também pode atualizar também.

A parte que leva um pouco de estudo é o fato de que quando você salva seu usuário para o repositório, você não está realmente salvando um objeto de usuário como você pode pensar. Você está realmente salvando o usuário_createEdEvent que contém todos os dados sobre o usuário.

Mais tarde, quando você precisar do objeto do usuário, você chamaria algo como _repo.getbyid (1);

Isso replicaria todos os eventos que lidam com esse usuário e criaram o objeto do usuário.

Espero que ajude :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top