背景:
我有一个模块,它声明了许多实例方法
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
。在这种情况下,我只想要format_text
并且明确地不想要get_file
and delete_file
。
我可以看到几个可能的解决方案:
- 以某种方式直接在模块上调用该方法,而不在任何地方包含它
- 我不知道如何/是否可以做到这一点。(因此这个问题)
- 不知何故包括
Usefulthings
并且只引入它的一些方法- 我也不知道如何/是否可以做到
- 创建一个代理类,包含
UsefulThings
在其中,然后委托format_text
给该代理实例- 这会起作用,但匿名代理类是一种黑客攻击。呸。
- 将模块拆分为 2 个或更多更小的模块
- 这也可行,并且可能是我能想到的最好的解决方案,但我宁愿避免它,因为我最终会得到几十个模块的扩散——管理这将是繁重的
为什么单个模块中有很多不相关的功能?它ApplicationHelper
来自一个 Rails 应用程序,我们的团队实际上已决定将其作为任何不具体到不属于其他任何地方的东西的垃圾场。主要是随处使用的独立实用程序方法。我可以把它分解成单独的助手,但是会有 30 个,每个都有 1 种方法......这似乎没有生产力