用于日志记录的Ruby模块几乎在每个类中都用作mixin。因此,它必须包含尽可能低的公共方法,以避免名称冲突。
问题是每个公共方法都使用相同的帮助程序方法,它们在混合后成为类成员。这些帮助程序方法是名称冲突的候选项。
如何将辅助方法保留在模块中,但将它们隐藏在 mixin 目标类中?
将它们转换为私有使它们完全无法访问。
听起来你忽略了单一责任原则。考虑重构以对此类内容使用依赖注入。
基本上是这样的:
module LoggerModule
def notice(m)
@logger.notice(m)
end
end
class Logger
def notice(m)
...
end
def internal(arg)
...
end
end
class Foo
include LoggerModule
def initialize(logger)
@logger = logger
end
end
Foo.new(Logger.new)
提示:查看委托,可能还有模块#prepend,以获得更简洁的方法来编写上述内容。(我的红宝石有点生疏。