Ich habe an einer großen Rails-App gearbeitet, in der die Verwendung von ActiveRecord-Rückrufen weit verbreitet und erschütternd war. Das Speichern eines Datensatzes hatte oft unerwartete Nebenwirkungen und es war eine Herausforderung, über das System nachzudenken.
Gleichzeitig habe ich Hooks gesehen, die als Teil der Vererbung (z. B. eine übergeordnete Klasse, die eine Vorlagenmethode verwendet, um Unterklassen das Hinzufügen von spezialisiertem Verhalten zu ermöglichen, ohne über die Interna der übergeordneten Elemente Bescheid wissen zu müssen) und Plug-Ins (z. B. ein Emacs-Modus, in dem ein Hook ausgeführt wird, wenn er aktiviert ist, sodass Benutzer in diesem Modus benutzerdefiniertes Verhalten hinzufügen können).
Mir ist klar, dass eine Rails-App und ein Lisp-Interpreter sehr unterschiedliche Systeme sind, aber ich bin gespannt, ob es bekannte Kriterien gibt, nach denen die Leute suchen, wenn sie entscheiden, ob Hooks die richtige Designwahl für das Problem sind, mit dem sie konfrontiert sind.
Das Thema, das mich anspricht, ist Vorhersehbarkeit. Der Missbrauch von Haken scheint in der Ferne zu gruseligen Aktionen und überraschendem Verhalten zu führen, während eine gute Verwendung zu einem Rahmen führen kann, der ohne enge Kopplung vorhersehbar ist.
Da ich noch ein paar Jahre in meiner Programmierkarriere bin, betrachte ich mich in vielerlei Hinsicht als Noob, und verdächtige Leute haben viel über dieses Thema nachgedacht. Welche Richtlinien können diese Entscheidung steuern?