用于记录的Ruby模块几乎在每个类中都用作mixin。因此,它必须包含尽可能低的公共方法,以避免名称冲突。
问题是每个公共方法使用相同的辅助方法,并且在混合之后它们成为类成员。这些辅助方法是名称冲突的候选方法。
如何在模块中保留辅助方法,但是将它们隐藏在mixin目标类中?
将它们转换为私有使它们完全无法访问。
答案 0 :(得分:1)
听起来像你忽略了single responsibility principle。考虑重构以使用依赖注入这种东西。
基本上是:
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,以便更清晰地编写上述内容。 (我的Ruby有点生疏。)