Tôi là một coder Ruby. Đối với tôi, monkeypatching là để thay đổi, ở thời gian chạy, các lớp hoặc các phương thức mô-đun trong một dự án bên ngoài. Những gì tôi quan tâm, là những gì cơ chế bạn có tại chỗ sẽ bảo vệ bạn khỏi một số sự lạm dụng của tính năng tốt đẹp đó. Follows, một số kịch bản mà tôi đã gặp phải, nơi monkeypatching đã cắn tôi.Làm thế nào để Smalltalk đối phó với monkeypatching?
Trong khi tôi không biết Smalltalk chút nào, ngôn ngữ đó đã có từ lâu trước khi Ruby. Tôi đã thực hiện một số nghiên cứu để xem liệu Smalltalk có giải quyết được một số vấn đề này hay không nhưng không tìm thấy nhiều trên Google. Vì vậy, ở đây tôi, yêu cầu Smalltalkers nếu họ có thể chia sẻ sự khôn ngoan của họ.
Kịch bản A: lỗi sửa chữa xung đột
dự án A và B phụ thuộc vào dự án C. Dự án C có một lỗi. Bản phát hành dự án A và B có bản sửa lỗi cho dự án C.
Nếu mã của bạn sử dụng Project A và B, làm cách nào bạn biết các bản vá sẽ không xung đột?
Kịch bản B: lỗi thời lỗi sửa chữa
Dự án C phát hành một phiên bản nhỏ cố định của dự án của họ.
Nếu bạn tải dự án A, bản vá sẽ vẫn được áp dụng, có khả năng vỡ? Tôi quan tâm để biết nếu có một số cơ chế tại chỗ, ví dụ, để không tải các bản vá nếu mã được cố định.
Kịch bản C: mâu thuẫn mở rộng
Dự án A và dự án sử dụng B lớp C của Foo. Cả hai đều thêm một phương thức tiện ích vào Foo, ví dụ: #toDate. Phiên bản toDate của A trả về một chuỗi ngày tháng và một đối tượng B là Ngày tháng.
Nếu bạn tải cả hai dự án (với C dep), có cơ chế cảnh báo/ngăn chặn xung đột không? Hoặc bạn sẽ phải chờ cho đến khi thời gian chạy ném một lỗi vì một kỳ vọng sai trong một phương pháp?
Về bản cập nhật câu hỏi
Đọc các câu trả lời, tôi nhận ra câu hỏi của tôi là quá rộng và mơ hồ. Vì vậy, đây là một phiên bản viết lại của nó.
Khả năng khỉ thật sự có vấn đề không? – CookieOfFortune
Những lời chỉ trích của bạn về monkeypatching có vẻ khá xa nhãn hiệu. Không có gì vốn có trong monkeypatching dẫn đến abstractions rò rỉ bất kỳ hơn trong thiết kế lớp học ban đầu. Cũng không phải là nó vốn có nhiều "crufty" hơn so với các mã khác. Việc tách một đối tượng thành các tệp khác nhau là đúng, mặc dù một số người cho rằng các mô-đun có thể quản lý là một điều tốt - thực tế, nó được coi là thực hành tốt để nhóm các chức năng liên quan trong Objective-C. Có lẽ vấn đề của bạn là nhiều hơn với các lập trình viên hơn là với các tính năng ngôn ngữ. – Chuck
Trong bất kỳ cae nào, toàn bộ khái niệm về việc chia nhỏ mọi thứ thành các tệp riêng biệt là không đúng chỗ; smalltalk không làm theo cách đó. –