Monday, February 11, 2013

Rails: Observers


En este patrón un objeto (el publicador o la fuente) informa a un conjunto de objetos interesados (los suscriptores) cuando su estado cambia.

La clase ActiveRecord::Observer sigue un patrón Singleton. Este patrón garantiza que como máximo habrá una instancia de una clase.

Los observadores de forma predeterminada se asignan a la clase con la que comparten un nombre. Así AuditoriaObserver estará ligado a la observación de auditoria. Si deseas asignar un nombre diferente a la clase a la que estás interesado en observar, puede utilizar el método de la clase Observer.observe ya sea a través de la clase concreta (Tweet) o un símbolo de esa clase (:tweet).

Veámos un ejemplo para ver el comportamiento de este patrón:


class AuditoriaObserver < ActiveRecord::Observer

  observe :tweet
  def after_create(auditoria)
    contact.logger.info('Nuevo tweet publicado!')
  end

  def after_destroy(auditoria)
    contact.logger.warn("Tweet con id: #{auditoria.id} fue borrado!")
  end
end

Como se puede ver en el ejemplo tenemos una clase Observer que observa a la clase Tweet, de tal manera que cuando se cree un objeto de este tipo o se borre tendremos constancia de ello.

Estos métodos son callbacks que podrían ir perfectamente en la clase Tweet, pero el hacer uso de este tipo de patrones...nos permite extraer de los modelos todo ese código que no tiene que ver directamente con el modelo.

No comments:

Post a Comment