Vâng, khỉpatching là rất hữu ích!
Bằng cách nào đó, tên dường như có ảnh hưởng rất lớn đến nhận thức của mọi người. Gọi nó là "khỉpatch" và nghe có vẻ tệ, gọi nó là "sửa chữa nóng" hoặc "sửa chữa nhanh" và nó có vẻ tốt.
Độc lập với điều đó, tôi nghĩ rằng khả năng thay đổi các phương thức / thuộc tính / hàm trong thời gian chạy là một điều rất hữu ích. Ngay cả những người dùng javascript cũng sử dụng nó cả ngày mà không biết.
Ví dụ:
button.onclick = function(e) { ...}
Dòng đơn giản này minh họa thực tế là bạn thay đổi hành vi của nút. Nó được thiết kế theo cách đó. Tương tự như vậy, bạn có thể thay đổi mọi chức năng khác nhưng sẽ thật ngớ ngẩn khi làm như vậy.
Bây giờ, đối với câu hỏi cung cấp các bản vá theo cách đó ... tốt ... tại sao không. Bạn chỉ cần tải về một bản vá nhỏ thay vì một bản phát hành lớn. Heck, bạn thậm chí có thể vá một máy chủ mà không dừng lại, thật tuyệt! Và sau đó, một ngày, bạn cũng có thể lấy bản phát hành mới nhất để cập nhật lớn hơn. Đủ công bằng. Vì vậy, có, tôi bỏ phiếu cho "bản vá thời gian chạy" là một điều tốt.
Thật thú vị, một số ngôn ngữ như Erlang thậm chí đã được xây dựng xung quanh khái niệm này. Khả năng cập nhật một máy chủ nhanh chóng.
Tất nhiên, cuối cùng, và giống như mọi thứ khác, vấn đề là bạn sử dụng nó như thế nào. Bạn có thể tạo ra những thứ OO tuyệt vời và một thứ tồi tệ, tất cả đều giống nhau.
BIÊN TẬP:
Hãy để tôi thêm một số phân biệt trường hợp, cho dù bạn đang vá thư viện của riêng bạn hoặc của bên thứ ba .
... về cơ bản, những gì bạn làm với một bản vá như vậy là sửa một lỗi của thư viện của riêng bạn hoặc của bên thứ ba . Trong cả hai trường hợp, nó hữu ích. Đối với riêng bạn, nó cho phép bạn cung cấp một bản sửa lỗi nhanh chóng. Đối với bên thứ ba, bạn sẽ đợi (vài tháng?) Cho đến khi họ tự sửa nó hoặc bạn tự làm điều đó ngay bây giờ. (bạn vẫn có thể gửi cho họ bản vá, để họ sẽ sửa nó về phía họ). Khi họ phát hành phiên bản lib tiếp theo với sự cố đã được khắc phục, bạn vẫn có thể, nếu bạn muốn cập nhật thư viện và xóa bản vá về phía bạn.
Bây giờ, tất nhiên, nếu bạn sử dụng một bản vá để thay đổi hành vi của một lib và xa lánh mục đích / cách làm việc của nó, thì rõ ràng đó là một công thức cho thảm họa. Ngay cả một con khỉ cũng sẽ thấy điều đó ... tốt, tôi hy vọng. ;)