Tôi đã làm việc trên một ứng dụng Rails lớn, nơi việc sử dụng các cuộc gọi lại ActiveRecord đang lan tràn và bừa bộn. Lưu một bản ghi thường có tác dụng phụ không mong muốn và đó là một thách thức đối với lý do về hệ thống.
Đồng thời, tôi đã thấy các hook được sử dụng để tạo hiệu ứng tốt như là một phần của thừa kế (ví dụ: lớp cha sử dụng phương thức mẫu để cho phép các lớp con thêm hành vi chuyên biệt mà không cần biết về nội bộ của cha mẹ) và trong các trình cắm thêm (ví dụ: chế độ emacs chạy hook khi được kích hoạt, cho phép người dùng thêm hành vi tùy chỉnh xung quanh chế độ đó).
Tôi nhận ra rằng ứng dụng Rails và trình thông dịch Lisp là những hệ thống rất khác nhau, nhưng tôi tò mò liệu có bất kỳ tiêu chí nổi tiếng nào mà mọi người tìm đến khi quyết định xem móc có phải là lựa chọn thiết kế phù hợp cho vấn đề họ gặp phải hay không.
Chủ đề nhảy ra với tôi là dự đoán. Việc lạm dụng móc dường như dẫn đến hành động ma quái ở khoảng cách xa và hành vi đáng ngạc nhiên, trong khi sử dụng tốt có thể dẫn đến một khuôn khổ có thể dự đoán được mà không cần khớp nối chặt chẽ.
Vì tôi vẫn chỉ còn vài năm trong sự nghiệp lập trình của mình, tôi coi mình là một người không chuyên về nhiều khía cạnh và mọi người nghi ngờ đã đặt một số lượng lớn suy nghĩ vào chủ đề này. Một số hướng dẫn có thể chỉ đạo quyết định này là gì?