J'ai travaillé sur une grande application Rails où l'utilisation des rappels ActiveRecord était endémique et pénible. Sauvegarder un enregistrement a souvent eu des effets secondaires inattendus et c'était un défi de raisonner sur le système.
Dans le même temps, j'ai vu des hooks utilisés à bon escient dans le cadre de l'héritage (par exemple, une classe parent utilisant une méthode de modèle pour permettre aux sous-classes d'ajouter un comportement spécialisé sans avoir besoin de connaître les internes du parent), et dans les plug-ins (par exemple, un mode emacs exécutant un hook lorsqu'il est activé, permettant aux utilisateurs d'ajouter un comportement personnalisé autour de ce mode).
Je me rends compte qu'une application Rails et un interprète Lisp sont des systèmes très différents, mais je suis curieux de savoir s'il existe des critères bien connus auxquels les gens se tournent pour décider si les crochets sont le bon choix de conception pour le problème auquel ils sont confrontés.
Le thème qui me saute aux yeux est la prévisibilité. Une mauvaise utilisation des crochets semble entraîner une action effrayante à distance et un comportement surprenant, tandis qu'une bonne utilisation peut conduire à un cadre prévisible sans couplage serré.
Comme je ne suis encore que quelques années dans ma carrière en programmation, je me considère comme un noob à bien des égards, et les gens suspects ont réfléchi à ce sujet. Quelles sont les lignes directrices qui peuvent orienter cette décision?