インスタンスメソッドがたくさんあり、すべて同じインスタンス変数を共有しています。クラスが大きくなったので、メソッドを約 50 個のモジュールに分割しました。そして、残ったクラスには、これら 50 個のモジュールがすべて含まれています。
メソッド名の衝突を避けるために、「module_name_method_name」のようなインスタンスメソッドでいっぱいの信じられないほど醜いコードになりました。問題は、各モジュールが同様の (似ているが同じではない) 機能を持っている可能性があることです (同様のメソッド名)。
私の現在のコードは次のようになります。
モジュール:
module Toyota
def toyota_method1;@foo...;end
def toyota_method2;@foo...;end
....
end
module Ford
def ford_method1;@foo...;end
def ford_method2;@foo...;end
....
end
.... 約 50 のそのようなモジュール
class Cars
include Toyota
include Ford
include ...
def foo
@foo = "bar"
@bar = "foo"
...
toyota_method1
ford_method2
toyota_method2
...
end
end
コードをより適切に設計するにはどうすればよいですか? 最も重要なことは、すべてのインスタンス メソッドが同じインスタンス変数を共有する必要があるということです..または、少なくとも何らかの方法で同じデータにアクセスできます!
編集:私はこれを自分で思いついた:
class Toyota
attr_accessor :foo
def method1
puts @foo
end
end
class Ford
attr_accessor :foo
def method1
puts @foo
end
end
class Cars
def foo
@foo = "bar"
toyota = Toyota.new
toyota.foo = @foo
toyota.method1
ford = Ford.new
ford.foo = @foo
ford.method1
end
end
cars = Cars.new
cars.foo
実際、それは醜いメソッド名の問題を解決しますが、現在、私は新しい問題に取り組んでいます: 変数 @foo は非常に大きくなる可能性があり、メモリに 50 回 (またはそれ以上) 重複しています (そのようなクラスが 50 あるため)。
他の解決策はありますか?