2014-12-05 52 views
0

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

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

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

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

回答

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) 

提示:考虑代表团,并可能模块#前插,更清洁的方式来写以上。 (我的红宝石有点生锈。)

+0

谢谢你的术语。我的目标是尽量减少对源代码的影响,直到只使用'include'指令和几个'log'方法调用。 – Paul 2014-12-05 15:37:08