Pregunta

¿Cuál es la diferencia entre una colección y un conjunto o lista cuando se usa Ohm & Redis?

Varios de los ejemplos de ohmios usan una lista en lugar de una colección (ver el enumere el documento mismo):

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

class Comment < Ohm::Model
end

¿Cuál es la justificación de esta opción de diseño?

¿Fue útil?

Solución

Lista - Pedido lista de elementos. Cuando solicita la lista completa, obtiene los elementos ordenados la forma en que los coloca en la lista.

Colección - desordenado recopilación de elementos. Cuando solicita la colección, los artículos pueden aparecer en orden aleatorio (por ejemplo, desordenado). **

En su ejemplo, se ordenan comentarios.

** Sé que el aleatorio no es lo mismo que desordenado, pero ilustra el punto.

Otros consejos

Solo para expandir la respuesta de Ariejan.

  • Lista - ordenada. Similar a una matriz en Ruby. Utilizado para colas y mantener artículos ordenados.

  • Establecer: una lista desordenada. Eso comportamiento Similar a una matriz en Ruby pero está optimizado para búsquedas más rápidas.

  • Colección: se usa junto con referencia, proporciona una forma simple de representar asociaciones.

En esencia, las colecciones y las referencias son métodos de conveniencia para tratar las asociaciones. Así que esto:

class Post < Ohm::Model
  attribute :title
  attribute :body
  collection :comments, Comment
end

class Comment < Ohm::Model
  attribute :body
  reference :post, Post
end

es un atajo para lo siguiente:

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

Para responder a su pregunta original sobre la justificación de la elección de diseño, se introdujeron colecciones y referencias para proporcionar una API simple para representar las asociaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top