バックグラウンド:
いくつかのインスタンスメソッドを宣言するモジュールがあります
module UsefulThings
def get_file; ...
def delete_file; ...
def format_text(x); ...
end
そして、クラス内からこれらのメソッドのいくつかを呼び出したいと思います。Rubyでこれを通常行う方法は次のとおりです。
class UsefulWorker
include UsefulThings
def do_work
format_text("abc")
...
end
end
問題
include UsefulThingsもたらすすべてのメソッドのUsefulThings。この場合、私は必要format_textとするだけで、明示的には必要get_fileありませんdelete_file。
これに対するいくつかの可能な解決策を見ることができます:
- どういうわけか、どこにも含めずにモジュールで直接メソッドを呼び出す
- これがどのように/できるのかわかりません。(したがって、この質問)
- どういうわけ
Usefulthingsかそれのいくつかのメソッドを含めて、それだけを 取り入れます- 私はまた、これがどのようにしてできるのかを知りません
- プロキシクラスを作成
UsefulThingsし、それに含めてから、format_textそのプロキシインスタンスに 委任する- これは機能しますが、匿名プロキシクラスはハックです。ああ。
- モジュールを2つ以上の小さなモジュールに分割する
- これも機能し、おそらく私が考えることができる最良のソリューションですが、数十および数十のモジュールが急増することになるため、回避することをお勧めします。これを管理するのは面倒です。
単一のモジュールに無関係な機能がたくさんあるのはなぜですか?これApplicationHelperは、私たちのチームが事実上、他のどこにも属さないほど具体的ではないもののゴミ捨て場として決定したRailsアプリからのものです。ほとんどどこでも使用されるスタンドアロンのユーティリティメソッド。私はそれを別々のヘルパーに分割することができましたが、それらの30があり、すべて1つのメソッドで...これは非生産的なようです
module UT; def add1; self+1; end; def add2; self+2; end; end使用したいとしますadd1add2Fixnum。そのためのモジュール関数があるとどのように役立ちますか?何か不足していますか?
Module#includedコールバックを使用してもう一方のモジュールをトリガーすることincludeにより、一方のモジュールが常に他方を自動的に含めるようにすることができます。このformat_textメソッドは、それ自体で有用であると思われるため、独自のモジュールに移動できます。これにより、管理の負担が少し軽減されます。