Question

Je suis en train de comprendre quand il convient d'utiliser des événements. Il me semble qu'un événement peut être considéré comme un déclencheur SQL. Alors, est-il correct d'utiliser un événement déclenché par un objet de domaine pour modifier un autre, ou il va impliquer le manque d'une conception bien pensée si nous utilisons des événements pour modifier les états d'autre objet? Ou devrait-il y avoir une classe de médiateur par lequel ces objets devraient modifier les uns des autres? Comment puis-je décider?

Y a-t-il des compromis que je devrais être préoccupé par ici, comme la façon dont l'utilisation des événements aura une incidence sur la testabilité?

Était-ce utile?

La solution

événements sont conçus pour découpler une zone d'un autre .

Cela implique parfois un comportement asynchrone , qui peut être une caractéristique supplémentaire, mais pas obligatoire. Par exemple, si vous voulez fournir une rétroaction rapide à l'utilisateur dans une interface graphique, et une partie de votre code fonctionne trop lentement (à moins qu'il doit être terminé avant de fournir des commentaires), l'appel régulier peut exécuter des codes rapides et créer un événement pour les autres, puis fournir une rétroaction GUI sans attendre l'événement pour être effectivement traité. Cet événement est stocké dans une file d'attente, et un ou plusieurs fils sont en train de traiter cette file d'attente à leur propre rythme.

Pour les événements synchrones, il est vraiment utile pour la communication inter-module, où les deux modules ne sont pas des dépendances de compilation sur l'autre . Les deux peuvent connaître une classe d'événements, et un « routeur d'événement »:

  • un module crée un événement et appelez le routeur,
  • le routeur sait (de la configuration précédente) quel autre module devrait recevoir, et l'envoyer au module de réception.
  

Ni le module connaissent l'autre, donc le concept de découplage. Très bien si les deux doivent être maintenus séparément: -)


De nombreuses variantes existent, pour certains sujets comme:

  • diffusion pour de nombreux récepteurs
  • fail-over (si le récepteur est temporairement, il recommence, l'événement sera livré lorsque le récepteur est et à nouveau enregistré)
  • vérification : un module technique peut recevoir des événements ciblés à d'autres modules, et les connecter
  • ...

Modification des objets de domaine via des événements semble un peu étrange . Est-ce le découplage mentionné plus vraiment justifié?

Cependant, je ne donnerais pas une opinion définitive avant de comprendre plus précisément ce que vous avez à l'esprit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top