2009-07-31 5 views
5

私はサードパーティのクラスに機能を追加するmixinモジュールを書いています。明らかに、私がサードパーティのクラスとそのクライアントにアクセス可能にしたいメソッドとインスタンス変数のいくつか。これらはmixinモジュールのパブリックインターフェイスを構成します。衛生的なRubyミックスインはどのように書くのですか?

しかし、特定の他のメソッドとインスタンス変数をカプセル化する必要があります。ミキシングクラスのメソッドやインスタンス変数を誤って上書きしたり、影を付けたり、衝突させたり、他の方法で干渉しないようにしたいとは思わない現在存在している可能性のあるもの、または第三者が混合しているクラスを変更した場合に将来作成される可能性のあるもの。

ミックスインがこのように「衛生的」であることを確認するために必要な予防措置はありますか?

答えて

2

機能とインスタンス変数をカプセル化する別のオブジェクトを作成し、mixinが公開可能にアクセス可能なメソッドをそのオブジェクトに委譲させるようにします。これで、単一のインスタンス変数をオブジェクトに関連付けるだけで済みます。あなたは、{Mixee => Delegate}ハッシュをモジュールに格納し、メソッドの各混合メソッドの開始点を参照することで、それを避けることさえできます。

1

おそらく、すべてのユーティリティメソッドを含むサブモジュールを作成することができます。

module Foo 
    module Utils 
    def self.answer 
     42 
    end 
    end 
    def helpme 
    "the answer is #{Utils.answer}" 
    end 
end 
include Foo 
puts helpme 
関連する問題