Ho lavorato su una grande app Rails in cui l'uso dei callback di ActiveRecord era dilagante e straziante. Salvare un disco spesso ha avuto effetti collaterali inaspettati ed è stata una sfida da ragionare sul sistema.
Allo stesso tempo, ho visto gli hook utilizzati con buoni risultati come parte dell'ereditarietà (ad esempio una classe genitore che utilizza un metodo modello per consentire alle sottoclassi di aggiungere un comportamento specializzato senza la necessità di conoscere gli interni del genitore) e nei plug-in (ad esempio una modalità emacs che esegue un hook quando è attivata, consentendo agli utenti di aggiungere un comportamento personalizzato in quella modalità).
Mi rendo conto che un'app Rails e un interprete Lisp sono sistemi molto diversi, ma sono curioso di sapere se ci sono criteri ben noti che le persone guardano quando decidono se gli hook sono la scelta giusta per il problema che stanno affrontando.
Il tema che mi emerge è la prevedibilità. L'uso improprio di ganci sembra portare a un'azione spettrale a distanza e comportamenti sorprendenti, mentre un buon uso può portare a un quadro prevedibile senza un accoppiamento stretto.
Dato che sono ancora solo pochi anni nella mia carriera di programmatore, mi considero un noob sotto molti aspetti e sospetto che le persone abbiano riflettuto molto su questo argomento. Quali sono alcune linee guida che possono guidare questa decisione?