バックグラウンド:
いくつかのインスタンスメソッドを宣言するモジュールがあります
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
使用したいとしますadd1
add2
Fixnum
。そのためのモジュール関数があるとどのように役立ちますか?何か不足していますか?
Module#included
コールバックを使用してもう一方のモジュールをトリガーすることinclude
により、一方のモジュールが常に他方を自動的に含めるようにすることができます。このformat_text
メソッドは、それ自体で有用であると思われるため、独自のモジュールに移動できます。これにより、管理の負担が少し軽減されます。