Ruby Class.inherited

Visita este artí­culo en http://www.estadobeta.com/2008/02/25/ruby-classinherited/

Por Ismael en Documentación, Ruby & Rails, artículos, tips

En mi artículo anterior explicaba cómo podemos usar la maleabilidad de Ruby para solucionar problemas espinosos. Concretamente, cómo “inyectar” datos desde una subclase a una superclase sin contravenir las buenas practicas de OOP (leer el artículo en cuestión para entender de qué diablos estoy hablando).

Resulta que Ruby nos ofrece otra solución, en bandeja de plata:

Code (ruby)
  1.  
  2. # La subclase sólo sabe sobre si misma
  3. #
  4. class FlickrAdapter < ServiceFactory
  5.   URL_EXP = /flickr\.com/
  6. end
  7.  
  8. # La Super Clase sabe cuando una subclase es creada!
  9. #
  10. class ServiceFactory
  11.   def self.inherited( subclass )
  12.     # self.adapters fue definido en el articulo anterior
  13.     #
  14.     adapters << subclass, subclass::URL_EXP
  15.   end
  16. end
  17.  

En Ruby, toda clase invoca el método de clase Class.inherited, que recibe la subclase como argumento, toda vez que una subclase es definida. Este callback es similar a Module.included (usado abundantemente en los plugins de ActiveRecord, por ejemplo). Podemos usar este método para registrar información de las subclases en la superclase, sin duplicar esta información en la superclase y evitando así romper la modularidad del código.

3 comentarios para “Ruby Class.inherited”

  1. GravatarFabian Ramírez Dice:

    Hablando de comentarios de ruby on rails, me gustaria que hecharas un vistaso a este articulo:

    http://www.gurunet.cl/noticia/ver/28/guruNET-apuesta-por-Ruby-on-Rails

    Saludos

  2. Gravatarvladimir prieto Dice:

    y mientras otros piensan en dejarlo.

  3. Gravatarismael Dice:

    Siempre fue una mala idea hacer un servicio de mensajeria como Twitter en Rails. De hecho es una mala idea hacerlo sobre HTTP!

    Rails no es ni pretende ser una solucion universal.

    Dicho eso, Rails le permitio a Twitter tener el servicio funcionando en pocas semanas y con 3 personas! Ahora que tienen un trafico descomunal tiene sentido invertir mas plata y tiempo en optimizar el rendimiento.

    Hasta que tenga el trafico de Twitter, voy a seguir trabajando con las herramientas que me hagan sentir mas comodo y productivo. Los problemas de escalabilidad son indicio de que tu sitio esta teniendo exito, no lo contrario. Para que preocuparse de problemas que no se tienen?

Deja un comentario

XHTML: puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>