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 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 di modello per consentire alle sottoclassi di aggiungere un comportamento specializzato senza dover conoscere gli interni dei genitori), e in plug-in (es. una modalità emacs che esegue un hook quando è attivata, consentendo agli utenti di aggiungere un comportamento personalizzato attorno a quella modalità).
Mi rendo conto che un'applicazione Rails e un interprete Lisp sono sistemi molto diversi, ma sono curioso di sapere se ci sono criteri noti a cui la gente guarda quando decidono se gli hook sono la scelta giusta per il problema che stanno affrontando .
Il tema che mi viene in mente è la prevedibilità. L'uso improprio di ami sembra portare a azione spettrale a distanza e comportamenti sorprendenti, mentre un buon uso può portare a un quadro prevedibile senza accoppiamento stretto.
Dato che sono ancora solo pochi anni nella mia carriera di programmatore, mi considero un noob per molti aspetti, e sospetto che la gente abbia messo una buona dose di riflessione su questo argomento. Quali sono alcune linee guida che possono guidare questa decisione?