Domanda

Sto cercando di capire quando è opportuno utilizzare gli eventi. Mi sembra che un evento può essere pensato come un trigger SQL. Poi, è corretto utilizzare un evento innescato da un oggetto di dominio per modificare un altro, o si comporterà la mancanza di un disegno ben pensato se usiamo gli eventi di modificare gli stati di un altro oggetto? O ci dovrebbe essere una classe mediatore attraverso il quale questi oggetti dovrebbero modificare l'un l'altro? Come faccio a decidere?

Ci sono compromessi che dovrei essere preoccupato qui, come come l'uso degli eventi inciderà testability?

È stato utile?

Soluzione

Gli eventi sono progettati per disaccoppiare una zona da un altro .

Questo talvolta comporta qualche comportamento asincrono , che può essere una funzione aggiuntiva, ma non è obbligatoria. Ad esempio, se si desidera fornire un rapido feedback all'utente in una GUI, e una parte del vostro codice viene eseguito troppo lentamente (a meno che non deve essere finito prima di fornire un feedback), poi la chiamata normale può eseguire codici veloci, e creare un evento per gli altri, quindi fornire un feedback GUI senza attendere l'evento da effettivamente trasformato. Questo evento viene memorizzato in una coda, e uno o più thread sono in fase di elaborazione che in coda al proprio ritmo.

Per eventi sincroni, è molto utile per la comunicazione tra moduli, in cui i due moduli non presentano dipendenze di compilazione di ciascun altro . Entrambi possono sapere di una classe di eventi, e di un "router evento":

  • un modulo crea un evento e chiamare il router,
  • il router conosce (dalla configurazione precedente) che cosa altro modulo dovrebbe riceverlo, e inviarlo al modulo di ricezione.
  

Né modulo conoscono l'altro, così il concetto di disaccoppiamento. Molto buono se entrambi devono essere mantenuti a parte: -)


Molte variazioni esistere, per alcuni argomenti come:

  • trasmissione per molti ricevitori
  • fail-over (se il ricevitore è temporaneamente inattivo, inizia di nuovo, l'evento verrà consegnato quando il ricevitore è installato e registrato di nuovo)
  • di revisione : un modulo tecnico può ricevere eventi mirati in altri moduli, e li log
  • ...

Modifica oggetti dominio tramite eventi sembra un po 'strano . È il disaccoppiamento menzionato più alto davvero giustificato?

Comunque, non darei un giudizio definitivo prima di capire con maggiore precisione ciò che avete in mente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top