web-dev-qa-db-fra.com

Programmation axée sur les événements: Quand ça vaut la peine?

Ok, je sais que le titre de cette question est presque identique à quand devrais-je utiliser une programmation basée sur les événements? Mais les réponses de ladite question ne m'ont pas aidé à décider si je devrais utiliser des événements dans le cas particulier 'm face.

Je développe une petite application. C'est une application simple et la plupart de ses fonctionnalités sont de base crud.

Sur certains événements (lors de la modification de certaines données), l'application doit écrire une copie locale desdites données dans un fichier. Je ne suis pas sûr de ce qui est le meilleur moyen de mettre en œuvre cela. Je peux:

  • Événements d'incendie Lorsque les données sont modifiées et lierent une réponse (générer le fichier) à de tels événements. Alternativement, mettez en œuvre le motif observateur. Cela semble être une complexité inutile.
  • Appelez le code générateur de fichiers directement à partir du code qui modifie les données. Beaucoup plus simple, mais il semble tort que la dépendance devrait être de cette façon, c'est-à-dire qu'il semble tort que la fonctionnalité principale de l'application (code qui modifie les données) doit être couplée à ce vercle supplémentaire (code qui génère un fichier de sauvegarde). Je sais cependant que cette application ne va pas évoluer vers un point auquel ce couplage pose un problème.

Quelle est la meilleure approche dans ce cas?

19
abl

Suivez le KISS Principe: Conservez-le simple, stupide ou le principe Yagni: vous n'allez pas en avoir besoin.

Vous pouvez écrire le code comme:

void updateSpecialData() {
    // do the update.
    backupData();
}

Ou vous pouvez écrire du code comme:

void updateSpecialData() {
     // do the update.
     emit SpecialDataUpdated();
}

void SpecialDataUpdatedHandler() {
     backupData();
}

void configureEventHandlers() {
     connect(SpecialDataUpdate, SpecialDataUpdatedHandler);
}

En l'absence d'une raison impérieuse à faire autrement, suivez la route plus simple. Les techniques telles que la manipulation des événements sont puissantes, mais elles augmentent la complexité de votre code. Cela nécessite plus de code pour avoir travaillé et cela se produit dans votre code plus difficile à suivre.

Les événements sont très critiques dans la bonne situation (imaginez essayer de faire une programmation de l'interface utilisateur sans événements!) Mais ne les utilisez pas lorsque vous pouvez KISS ou Yagni à la place.

31
Winston Ewert

L'exemple que vous décrivez d'une donnée simple, où la modification déclenche un effet peut parfaitement être mise en œuvre avec le modèle de conception d'observateur :

  • ceci est plus simple à mettre en œuvre et à entretenir que le code intégral de l'événement.
  • le couplage entre sujet et observateur peut être abstrait, ce qui facilite la séparation des préoccupations.
  • c'est idéal pour une relation de nombreuses relations (les sujets ont un ou plusieurs observateurs).

Une approche axée sur les événements vaut la peine d'investir pour des scénarios plus complexes, lorsque de nombreuses interactions différentes peuvent survenir, dans un contexte de plusieurs à plusieurs, ou si des réactions en chaîne sont envisagées (par exemple, un sujet informe un observateur, ce qui souhaite dans certains cas modifier le sujet ou autres sujets)

13
Christophe