Я вижу создание класса-оболочки для простого списка объектов, имеющего некоторые преимущества. Как вы отметили в комментарии, если вы хотите хранить данные по-разному, полезно писать различные классы.
Для типичного использования 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]
Это, как говорится, есть один нюанс, и что должен делать с змеевидных методов в ОРМ:
# 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)
Если вы думаете, что в конечном итоге вы добавите методы в список простых объектов, вы должны сделать это в классе. Но в остальном я думаю, что использование явно названных переменных достаточно.
Это зависит. Для чего вы использовали эти ПОРО? –
Например, для хранения информации, полученной от пользователя. Сохранение в сеансе. И т. Д. (Различные виды операций с сохранением базы данных) – RhinoLarva