何を記述していることはフライ級のデザインパターンです。 Ruby(http://designpatternsinruby.com/section02/flyweight.html)でほとんど使われていないものもありますが、他のものは実装を提供しています(http://www.scribd.com/doc/396559/gof-patterns-in-rubyページ14)
個人的には、これらの属性をすべてyamlファイルに入れて、変数:
ATTRIBUTES = YAML.load_file(File.expand_path( 'attributes.yml'、File.dirname(FILE))
たり、変更されませんと仮定し、ここでのキャッシングとクラスメソッド(、アプリが実行されている間にymlファイルが新しい値を必要としている)。私はActiveSupport::Concern
をここで使用することをお勧めします。クラスメソッドでの従来の混合方法:
module Basic
extend ActiveSupport::Concern
module ClassMethods
def attributes_file
File.expand_path('attributes.yml', File.dirname(__FILE__))
def attributes
@attributes ||= YAML.load_file(attributes_file)
@attributes
end
end
module InstanceMethods
# define any here that you need, like:
def attributes
self.class.attributes
end
end
end
各属性のメソッドを定義したり、属性ハッシュにインデックスを付けることができます。また、空の状態になり、method_missingを定義してその名前の属性が存在するかどうかを確認することで、共有構成に属性を追加したいときにメソッドを追加する必要がなくなります。
もう1つ質問していただきありがとうございます。拡張(ベース)が実際に何を意味するのか分かりません。私にリンクを与えることができますか?ありがとう! – com
[extended()](http://www.ruby-doc.org/core/classes/Module.html#M000459)は[included()]のようなものです(http://www.ruby-doc.org /core/classes/Module.html#M000458):これは 'extends Basic'を使うときに起きるモジュールメソッドです(' Basic.extend(Use) 'を呼び出します)。 'included()'は 'include Basic'を使うときに始まります。 –