0
用于日志记录的Ruby模块几乎在每个类中都被用作mixin。因此它必须包含尽可能低的公开方法以避免名称冲突。在Ruby中隐藏助手方法mixin
问题是,每个公共方法使用相同的帮助器方法,并在混合后成为类成员。这些辅助方法是名称冲突的候选方法。
如何在模块中保留辅助方法,但将它们从mixin目标类中隐藏起来?
将它们转换为私有使它们完全无法访问。
用于日志记录的Ruby模块几乎在每个类中都被用作mixin。因此它必须包含尽可能低的公开方法以避免名称冲突。在Ruby中隐藏助手方法mixin
问题是,每个公共方法使用相同的帮助器方法,并在混合后成为类成员。这些辅助方法是名称冲突的候选方法。
如何在模块中保留辅助方法,但将它们从mixin目标类中隐藏起来?
将它们转换为私有使它们完全无法访问。
听起来就像你忽略了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)
提示:考虑代表团,并可能模块#前插,更清洁的方式来写以上。 (我的红宝石有点生锈。)
谢谢你的术语。我的目标是尽量减少对源代码的影响,直到只使用'include'指令和几个'log'方法调用。 – Paul 2014-12-05 15:37:08