Lý lịch:
Tôi có một mô-đun khai báo một số phương thức cá thể
module UsefulThings
def get_file; ...
def delete_file; ...
def format_text(x); ...
end
Và tôi muốn gọi một số phương thức này từ trong một lớp. Làm thế nào bạn thường làm điều này trong ruby là như thế này:
class UsefulWorker
include UsefulThings
def do_work
format_text("abc")
...
end
end
Vấn đề
include UsefulThings
mang lại tất cả các phương pháp từ UsefulThings
. Trong trường hợp này tôi chỉ muốn format_text
và rõ ràng không muốn get_file
và delete_file
.
Tôi có thể thấy một số giải pháp có thể cho việc này:
- Bằng cách nào đó gọi phương thức trực tiếp trên mô-đun mà không bao gồm nó ở bất cứ đâu
- Tôi không biết làm thế nào / nếu điều này có thể được thực hiện. (Do đó câu hỏi này)
- Bằng cách nào đó bao gồm
Usefulthings
và chỉ mang lại một số phương pháp của nó- Tôi cũng không biết làm thế nào / nếu điều này có thể được thực hiện
- Tạo một lớp proxy, bao gồm
UsefulThings
trong đó, sau đó ủy quyềnformat_text
cho thể hiện proxy đó- Điều này sẽ làm việc, nhưng các lớp proxy ẩn danh là một hack. Kinh quá.
- Chia mô đun thành 2 hoặc nhiều mô đun nhỏ hơn
- Điều này cũng sẽ hoạt động, và có lẽ là giải pháp tốt nhất tôi có thể nghĩ ra, nhưng tôi muốn tránh nó vì tôi kết thúc với sự phát triển của hàng chục và hàng chục mô-đun - việc quản lý điều này sẽ rất nặng nề
Tại sao có nhiều hàm không liên quan trong một mô-đun? Đó là ApplicationHelper
từ một ứng dụng đường ray, mà nhóm của chúng tôi đã quyết định thực tế là bãi rác cho bất cứ thứ gì không đủ cụ thể để thuộc về bất cứ nơi nào khác. Chủ yếu là các phương pháp tiện ích độc lập được sử dụng ở mọi nơi. Tôi có thể chia nó thành những người trợ giúp riêng biệt, nhưng có 30 người trong số họ, tất cả chỉ có 1 phương pháp ... điều này dường như không hiệu quả
module UT; def add1; self+1; end; def add2; self+2; end; end
và bạn muốn sử dụng add1
nhưng không phải add2
trong lớp Fixnum
. Làm thế nào nó sẽ giúp có chức năng mô-đun cho điều đó? Tui bỏ lỡ điều gì vậy?
Module#included
gọi lại để kích hoạt mô-đuninclude
kia. Cácformat_text
phương pháp có thể được chuyển sang mô-đun riêng của nó, vì nó có vẻ là hữu ích về riêng của nó. Điều này sẽ làm cho việc quản lý bớt một chút gánh nặng.