在Ruby mixin中隐藏辅助方法

时间:2014-12-05 12:45:31

标签: ruby private mixins

用于记录的Ruby模块几乎在每个类中都用作mixin。因此,它必须包含尽可能低的公共方法,以避免名称冲突。

问题是每个公共方法使用相同的辅助方法,并且在混合之后它们成为类成员。这些辅助方法是名称冲突的候选方法。

如何在模块中保留辅助方法,但是将它们隐藏在mixin目标类中?

将它们转换为私有使它们完全无法访问。

1 个答案:

答案 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有点生疏。)