2014-12-05 50 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