いくつかの利点を持つ単純なオブジェクトリスト用のラッパークラスを作成することができます。コメントの中で言及しているように、データをさまざまな方法で保存したい場合は、別個のクラスを作成するのが便利です。
典型的なDataMapperやActiveRecordの使用については、特にコレクションにメソッドを追加していない場合は、プレーンオブジェクトリスト用のラッパークラスを作成するのは一般的ではないと思います。それが一般的ではない主な理由は、ActiveRecordまたはDataMapperのクエリ結果が配列のようなものであることです。さらに、モデルインスタンスをハッシュに変換することで、実際に追加された機能は得られません。私はいくつかの例を示しましょう:
# collections are array-like
User.all.map(&:name) == User.all.to_a.map(&:name)
# converting a record to a hash doesn't add much
user = User.first
user_hash = user.attributes
user.name == user_hash[:name]
言われて、そこに1つの警告があり、そしてそれがORMでチェーン可能な方法で行う必要があること:
# this is valid chaining
User.all.where(name: "max")
# this raises a NoMethodError for 'where'
User.all.to_a.where(name: "max")
where
はORM方法、ではない配列であります方法。したがって、クエリ結果を配列に変換すると、その配列にはアクセスできませんでした。このため、配列とクエリーコレクションを区別することは便利です。
しかし、実際に空のラッパークラスを作成するとどれくらいのメリットがありますか?
class RecordsInMemory
def initialize(query_collection)
@list = query_collection.map(&:attributes)
end
end
records_in_memory = RecordsInMemory.new(User.all)
records_in_memory.list.map(&:name)
# versus ...
records_in_memory = User.all.map(&:attributes)
records_in_memory.map(&:name)
長期的には、プレーンオブジェクトリストにメソッドを追加すると思うなら、それをクラスにする必要があります。しかし、そうでなければ、明確な名前の変数を使用すれば十分だと思います。
です。それらのPOROは何を使用しますか? –
たとえば、ユーザーから取得した情報をそこに格納する。セッションに保存する。その他(異なる種類のデータベース永続化操作) – RhinoLarva