OHM & REDIS: Когда использовать набор, список или коллекцию?
-
23-10-2019 - |
Вопрос
В чем разница между коллекцией и набором или списком при использовании OHM & Redis?
Несколько примеров OHM используют список, а не коллекцию (см. Перечислите сам документ):
class Post < Ohm::Model
list :comments, Comment
end
class Comment < Ohm::Model
end
Какое обоснование этого выбора дизайна?
Решение
Список - заказан список элементов. Когда вы запрашиваете весь список, вы получаете заказанные элементы, как вы помещаете их в список.
Коллекция - неупорядочен коллекция элементов. Когда вы запрашиваете сбор, элементы могут появиться в случайном порядке (например, неупорядочен). **
В вашем примере комментарии заказаны.
** Я знаю, что случайно не то же самое, что неупорядочен, но это иллюстрирует эту точку зрения.
Другие советы
Просто чтобы расширить ответ Ариджана.
Список - заказан. Подобно массиву в Руби. Используется для очередей и поддержание заказанных предметов.
Установить - неупорядоченный список. Это ведет себя Подобно массиву в Ruby, но оптимизирован для более быстрых поисков.
Сбор - используется в сочетании с ссылка, он обеспечивает простой способ представления ассоциаций.
По сути, коллекции и ссылки являются удобными методами работы с ассоциациями. Итак:
class Post < Ohm::Model
attribute :title
attribute :body
collection :comments, Comment
end
class Comment < Ohm::Model
attribute :body
reference :post, Post
end
это ярлык для следующего:
class Post < Ohm::Model
attribute :title
attribute :body
def comments
Comment.find(:post_id => self.id)
end
end
class Comment < Ohm::Model
attribute :body
attribute :post_id
index :post_id
def post=(post)
self.post_id = post.id
end
def post
Post[post_id]
end
end
Чтобы ответить вам на оригинальный вопрос о обосновании выбора дизайна - были введены коллекции и ссылки, чтобы предоставить простой API для представления ассоциаций.