Pergunta

Estou tentando entender quando é apropriado usar eventos. Parece -me que um evento pode ser pensado como um gatilho SQL. Então, é correto usar um evento desencadeado por um objeto de domínio para modificar outro ou implicará a falta de um design bem pensado se usarmos eventos para modificar os estados de outros objetos? Ou deve haver uma classe mediadora através da qual esses objetos devem se modificar? Como eu decido?

Existem trocas com as quais devo me preocupar aqui, como o uso de eventos afetará a testabilidade?

Foi útil?

Solução

Os eventos são projetados para dissociar uma área de outra.

Isso às vezes envolve alguns comportamento assíncrono, que pode ser um recurso adicional, mas não é obrigatório. Por exemplo, se você deseja fornecer feedback rápido ao usuário em uma GUI e uma parte do seu código é executada muito devagar (a menos que precise ser concluído antes de fornecer feedback), a chamada regular pode executar códigos rápidos e criar um Evento para os outros, forneça feedback da GUI sem esperar que o evento seja realmente processado. Este evento é armazenado em uma fila e um ou mais threads estão processando essa fila no seu próprio ritmo.

Para eventos síncronos, é realmente útil para comunicação entre módulos, onde os dois Os módulos não têm dependências de tempo de compilação umas sobre as outras. Ambos podem saber sobre uma aula de eventos e um "roteador de eventos":

  • Um módulo cria um evento e chama o roteador,
  • O roteador sabe (da configuração anterior) que outro módulo deve recebê -lo e enviá -lo para o módulo de recebimento.

Nenhum dos módulos conhece o outro, assim o conceito de dissociação. Muito bom se ambos devem ser mantidos separadamente :-)


Existem muitas variações, para alguns tópicos como:

  • transmissão para muitos receptores
  • fracasso (Se o receptor estiver inativo temporariamente, ele começará novamente; o evento será entregue quando o receptor estiver subindo e registrado novamente)
  • auditoria : Um módulo técnico pode receber eventos direcionados a outros módulos e registrá -los
  • ...

Modificar objetos de domínio por meio de eventos parece um pouco estranho. O desacoplamento mencionado é realmente justificado?

No entanto, eu não daria uma opinião definitiva antes de entender mais precisamente o que você tem em mente.

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