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