Pergunta

Depois de ter visto este vídeo por Greg Yound em DDD

http://www.infoq.com/interviews/greg-young-ddd

Eu queria saber como você poderia implementar Comando-Consulta de separação (CQS) com DDD quando você tem em alterações de memória?

Com CQS você tem dois repositórios, uma para comandos, um para consultas. Bem como dois grupos de objetos, objetos de comando e objetos de consulta. Comando objetos só tem métodos, e há propriedades que possam expor a forma dos objetos, e não devem ser usados ??para exibir dados na tela. Consulta objetos, por outro lado são usados ??para exibir dados na tela.

No vídeo os comandos sempre ir para o banco de dados, e assim você pode usar o repositório de consulta para buscar os dados atualizados e exibir novamente na tela.

Você poderia usar CQS com algo parecido e tela de edição em ASP.NET, onde as mudanças são feitas na memória e as necessidades de tela para ser atualizado várias vezes com as mudanças antes que as alterações são persistentes no banco de dados?

Por exemplo

  1. I buscar um objeto de consulta a partir do repositório de consulta e exibi-lo na tela
  2. I clique em editar
  3. I refetch um objeto de consulta a partir do repositório objeto de consulta e exibi-lo no formulário no modo de edição
  4. I alterar um valor no formulário, que autoposts trás e busca o objeto de comando e emite o comando relevante
  5. O que fazer: agora eu preciso para exibir o objeto atualizado como o comando fez alterações para os campos calculados. Como o objeto de comando não foi salvo no banco de dados que não posso usar o repositório de consulta. E com CQS eu não estou destinado a expor a forma do objeto de comando para exibição na tela. Como você obter um objeto de consulta de volta com as mudanças atualizado para exibir na tela.

Um par de soluções possíveis que eu posso pensar é ter um repositório sessão, ou uma maneira de obter um objeto de consulta do objeto de comando. Ou será CQS não se aplicam a este tipo de cenário?

Parece-me que nas mudanças de vídeo se persistiu imediatamente ao banco de dados, e eu ainda não encontrei um exemplo de DDD com CQS que aborda a questão de dosagem alterações em um objeto de domínio e atualizar a visão da modificado domínio objeto antes de finalmente emitir um comando para salvar o objeto de domínio.

Foi útil?

Solução

Se você realmente quiser usar CQS para isso, eu diria que tanto o repo Consulta e Write repo ambos têm uma referência para o mesmo armazenamento de backup. Normalmente, esta referência é através de um banco de dados externo -. Mas no seu caso poderia ser um List ou similar

Outras dicas

Então, o que parece que você quer aqui é um comando mais granular.

EG:. O usuário interage com a página web (digamos que fazer um check-out com um carrinho de compras)

As múltiplas páginas recebendo informações estão construindo um comando. O comando não é enviado até que o usuário realmente cheques fora, onde todas as informações são enviadas em um único comando à chamada do let domínio que um comando "CheckOut".

modelos de apresentação são bastante útil em abstrair esse tipo de interação.

Espero que isso ajude.

Greg

Além disso para o resto de suas preocupações ...

Estas são mais de modo preocupações com consistência eventual em oposição a CQRS. Você não precisa ser, eventualmente, consistente com CQRS você pode fazer o processamento do comando também escreve para a loja de relatórios (ou usar a mesma loja física para ambos como mencionado) de uma forma consistente. Na verdade, eu recomendo que as pessoas de fazer isso como a sua arquitetura base e depois vêm throught e introduzir consistência eventual, quando necessário, pois há custos azssociated com ele.

Na memória, você normalmente usa o Observer padrão de design .

Na verdade, você sempre quer usar esse padrão, mas a maioria dos bancos de dados não oferecem uma maneira eficiente para chamar um método em seu aplicativo quando algo no DB muda.

O Unidade de Trabalho padrão de design de Padrões de partidas Enterprise Application Architecture CQS muito bem - é basicamente um grande comando que persistem coisas no banco de dados <. / p>

JdonFramework é framework java CQRS DDD, é fornecer um eventos de domínio + padrão assíncrono, mais detalhes https: // jdon.dev.java.net/

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