Saya telah bekerja pada aplikasi Rails besar di mana penggunaan panggilan balik ActiveRecord merajalela dan mengerikan. Menyimpan catatan sering kali memiliki efek samping yang tidak terduga dan itu merupakan tantangan untuk alasan tentang sistem.
Pada saat yang sama, saya telah melihat kait yang digunakan untuk efek yang baik sebagai bagian dari warisan (misalnya kelas induk menggunakan metode templat untuk memungkinkan subkelas menambahkan perilaku khusus tanpa perlu tahu tentang internal orangtua), dan di plug-in (mis. mode emacs menjalankan hook saat diaktifkan, memungkinkan pengguna untuk menambahkan perilaku khusus di sekitar mode itu).
Saya menyadari bahwa aplikasi Rails dan interpreter Lisp adalah sistem yang sangat berbeda, tetapi saya ingin tahu apakah ada kriteria yang dikenal orang ketika memutuskan apakah kait adalah pilihan desain yang tepat untuk masalah yang mereka hadapi.
Tema yang melompat pada saya adalah prediktabilitas. Penyalahgunaan kait tampaknya mengarah pada tindakan seram di kejauhan dan perilaku mengejutkan, sedangkan penggunaan yang baik dapat menyebabkan kerangka kerja yang dapat diprediksi tanpa kopling ketat.
Karena saya masih hanya beberapa tahun dalam karir pemrograman saya, saya menganggap diri saya noob dalam banyak hal, dan mencurigai orang telah memasukkan cukup banyak pemikiran ke dalam topik ini. Apa saja pedoman yang dapat mengarahkan keputusan ini?