Я працював над великим додатком Rails, де використання зворотних викликів ActiveRecord бурхливо і неприємно. Збереження запису часто мало несподівані побічні ефекти, і міркувати про це було проблемою.
У той же час я бачив гачки, які використовуються для хорошого ефекту як частина спадкування (наприклад, батьківський клас, що використовує шаблон-метод, щоб дозволити підкласам додавати спеціалізовану поведінку, не знаючи про внутрішні ресурси батьків), а також у плагінах (наприклад, режим emacs, на якому працює гачок, коли він активований, що дозволяє користувачам додавати власну поведінку навколо цього режиму).
Я розумію, що програма Rails та інтерпретатор Lisp - це дуже різні системи, але мені цікаво, чи є якісь відомі критерії, на які люди звертаються, вирішуючи, чи гачки - це правильний вибір дизайну для проблеми, з якою вони стикаються.
Тема, яка вискакує у мене, - передбачуваність. Неправильне використання гачків, здається, призводить до моторошних дій на відстані та дивовижної поведінки, тоді як хороше використання може призвести до рамки, передбачуваного без жорсткого зчеплення.
Оскільки я ще лише кілька років займаюсь кар’єрою програмування, я багато в чому вважаю себе нобієм, і підозрювані люди вклали в цю тему досить багато думок. Які деякі вказівки можуть керувати цим рішенням?