Pergunta

Eu trabalhei minha maneira através da orientação Prism e acho que tenho uma compreensão da maioria dos seus veículos de comunicação.

Comandante é muito simples, por isso é claro que o DelegateCommand será utilizado apenas para ligar a Ver com o seu modelo.

É um pouco menos clara, quando se trata de atravessar módulo de comunicação, especificamente quando usar EventAggregation sobre Composite Comandos.

O efeito prático é o mesmo exemplo.

  • Você publica um evento -> todos os assinantes receber aviso e executar código em resposta
  • Você executar um comando composto -> todos os comandos registrados são executados e com ela o seu código anexado

Ambos trabalham ao longo das linhas de "dispare e esqueça", ou seja, eles não se preocupam com quaisquer respostas de seus assinantes após a queima do evento / executar os comandos.

Eu tenho dificuldade em ver uma diferença prática no uso embora eu entenda que a implementação de ambos (sob a capa) é muito diferente.

Então, devemos pensar o que realmente significa - Evento? É que quando algo acontece (um evento ocorre)? Algo que o usuário não solicitou diretamente como uma "solicitação da web completa"?

E Comando? Isso quer dizer que um usuário clicou em algo e, assim, emitido um comando para a nossa aplicação, solicitando um serviço diretamente?

É isso? Ou existem outras maneiras de determinar quando usar um desses veículos de comunicação sobre o outro. A orientação, embora um dos melhores documentações que eu li, não dá nenhuma explicação específica.

Então, espero que as pessoas envolvidas na / usando Prism pode ajudar a lançar alguma luz sobre este assunto.

Foi útil?

Solução

Existem duas diferenças principais entre estes dois.

  1. CanExecute para comandos . Um comando pode dizer se é ou não é válida para execução pelo chamado Command.RaiseCanExecuteChanged () e tendo o seu delegado CanExecute retorna falso. Se você considerar o caso de um "Save All" CompositeCommand composição vários "salvar" comandos, mas um do comandos dizendo que não pode executar, o botão Salvar tudo vai automaticamente disable (bom!).
  2. EventAggregator é um Messaging padrão e Comandos são uma Comandando padrão . Apesar CompositeCommands não são explicitamente um padrão de interface do usuário, é implicitamente assim (Geralmente eles são ligados a um ação de entrada, como um botão de clique). EventAggregator não é desta forma - qualquer parte do pedido eficazmente levantar um EventAggregator processos de fundo,: evento ViewModels, etc. É um avenida intermediado para mensagens em toda a sua aplicação com suporte para coisas como filtragem, fundo segmento de execução, etc.

Espero que isso ajuda a explicar as diferenças. É mais difícil dizer quando usar cada um, mas geralmente eu uso a regra de ouro que se de interação com o usuário que gera o evento, use um comando para qualquer outra coisa, o uso EventAggregator .

Espero que isso ajude.

Outras dicas

Além disso, há uma diferença mais importante:. Com a implementação atual, um evento do EventAggregator é assíncrona , enquanto o CompositeCommand é síncrona

Se você quiser implementar algo como "notificar esse evento X aconteceu; fazer algo que depende dos manipuladores de eventos para o evento X ter executado", você tem que fazer algo como Application.DoEvents () ou usar CompositeCommands <. / p>

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