Ohm & Redis: когда использовать набор, список или коллекцию? - PullRequest
5 голосов
/ 24 января 2011

В чем разница между коллекцией и набором или списком при использовании Ohm & Redis?

Некоторые из примеров Ohm используют список, а не коллекцию (см. Сам документ list ):

class Post < Ohm::Model
  list :comments, Comment
end

class Comment < Ohm::Model
end

Каково обоснование этого выбора дизайна?

Ответы [ 2 ]

14 голосов
/ 08 июня 2011

Просто расширим ответ Ариян.

  • Список - заказан.Похоже на массив в Ruby.Используется для очередей и поддержания порядка элементов.

  • Set - неупорядоченный список.Он ведет себя подобно массиву в 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 для представления ассоциаций.

5 голосов
/ 24 января 2011

Список - упорядоченный список элементов.Когда вы запрашиваете весь список, вы получаете элементы, упорядоченные так, как вы их поместили в список.

Коллекция - неупорядоченная коллекция элементов.Когда вы запрашиваете коллекцию, элементы могут появляться в случайном порядке (например, неупорядоченные). **

В вашем примере упорядочены комментарии.

** Я знаю, что случайные не совпадаютнеупорядоченный, но это иллюстрирует суть.

...