OHM & REDIS: Когда использовать набор, список или коллекцию?

StackOverflow https://stackoverflow.com/questions/4781605

  •  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 для представления ассоциаций.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top