私はActiveRecordコールバックの使用が横行し、悲惨な大規模なRailsアプリに取り組んできました。多くの場合、レコードを保存すると予期しない副作用が発生し、システムについて推論することが困難でした。
同時に、継承の一部として有効に使用されるフック(たとえば、サブクラスが親の内部について知る必要なく特別な動作を追加できるようにするテンプレートメソッドを使用する親クラス)とプラグインを使用するフックを見てきました(例えば、emacsモードがアクティブになるとフックを実行し、ユーザーがそのモードの周りにカスタム動作を追加できるようにします)。
RailsアプリとLispインタープリターは非常に異なるシステムであることは理解していますが、直面している問題に対してフックが適切な設計の選択肢であるかどうかを決定するときに、よく知られている基準があるかどうか知りたいです。
私に飛びつくテーマは予測可能性です。フックの誤用は、遠くで不気味な行動や意外な振る舞いにつながるようですが、適切に使用すると、緊密な結合がなくても予測可能なフレームワークにつながる可能性があります。
私はまだプログラミングのキャリアを始めて数年しか経っていないので、私は多くの点で自分自身を初心者だと考えており、人々はこのトピックにかなりの量の考えを入れていると思われます。この決定を導くことができるいくつかのガイドラインは何ですか?