Pergunta

Um dos princípios básicos da CQRS, como eu entendo, é que os comandos deve ser o comportamento-centric, e tem um valor no negócio ou a UL, e não centrada em dados, ie., CRUD. Em vez de se concentrar em atualizar um cliente, temos comandos como CustomerHasMoved. E se você tem telas CRUD que estão lá para certos dados corretos. Por exemplo, precisamos mudar o nome de um cliente que está mal escrito. Isto realmente não tem muito valor no negócio. Se este ser apenas sob a égide de um comando UpdateCustomer?

Foi útil?

Solução

Na verdade, poderia haver várias razões para atualizar o nome de um cliente. Como você dizia, poderia ser mal escrito ou ... você poderia se casar e mudar seu nome para o seu marido.

Se você tinha apenas um comando UpdateCustomer, você perderia a intenção original e você não seria capaz de ter comportamentos diferentes para cada um deles. Se o nome foi misselled poderia ser tão simples como atualizar o banco de dados, enquanto que se o seu cliente se casou você pode precisar notificar o departamento de marketing para tthat eles podem oferecer um desconto.

No caso em que sua entidade é puramente CRUD, que é que não há intenção de que você pode associar com modificando as propriedades, então não há problema em ter um UpdateEntityCommand. Você pode, então, a transição lentamente para algo mais tarefa com base

Outras dicas

Eu só quero colocar um comentário sobre esta rapidamente como apareceu.

É importante notar que alguns objetos são realmente CRUD e isso é ok. Eu não pode realmente se importa por que um nome está mudando em meu domínio onde eu enviar produtos para as pessoas e só precisa que os dados para imprimir etiquetas de endereçamento. O truque está em fazer o comportamento padrão e depois reverter para uma interface CRUD uma vez que você tem certeza de que realmente não se preocupam com as razões em oposição à vice-versa.

Greg

CustomerHasMoved é o evento que é disparado depois de ter actualizado a clientes localização. Este evento atualiza os bancos de dados / bases de dados cache de leitura. O comando do gui deve ser MoveCustomer ou algo parecido. Eu acho que eu iria colocar a atualização do nome do cliente em um comando como UpdateCustomer.

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