在 Ruby mixin 中隐藏帮助程序方法



用于日志记录的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,以获得更简洁的方法来编写上述内容。(我的红宝石有点生疏。

最新更新