背景:
我有一个模块,它声明了许多实例方法
module UsefulThings
def get_file; ...
def delete_file; ...
def format_text(x); ...
end
我想从类中调用其中一些方法.在ruby中通常是这样做的:
class UsefulWorker
include UsefulThings
def do_work
format_text("abc")
...
end
end
问题
include UsefulThings
带来了UsefulThings
种方法中的all种.在这种情况下,我只想要format_text
,明确地说,我不想要get_file
和delete_file
.
我可以看到几种可能的解决方案:
- 以某种方式直接在模块上调用该方法,而不将其包含在任何地方
- 以某种方式包括
Usefulthings
个,并且只引入其中一些方法 - 创建一个代理类,其中包含
UsefulThings
,然后将format_text
委托给该代理实例 - 将模块拆分为两个或更多更小的模块
为什么一个模块中有很多不相关的功能?这是rails应用程序的ApplicationHelper
分,我们的团队实际上已经决定将其作为任何不太具体的东西的倾倒场,不属于其他任何地方.大多数是独立的实用方法,在任何地方都可以使用.我可以把它分解成不同的助手,但会有30个,每个都有一种方法...这似乎是徒劳的