Cuando leo más acerca de la metaprogramación de Ruby, la mayoría de las veces encontramos al menos dos soluciones para resolver un problema. Por favor tener en cuenta dos ejemplos siguientes:Clase vs Módulo en el diseño de Ruby API?
class Base
def self.has_many(*args)
# ...
end
end
class Student < Base
has_many :books
end
Otro estilo:
module Base
def self.included(klass)
klass.extend ClassMethods
end
module ClassMethods
def has_many(*args)
# ...
end
end
end
class Student
include Base
has_many :books
end
Pero cuando diseñamos API, tenemos que decidir cuál usar, pero me gustaría pedir a sus ideas y algunos de las mejores prácticas que la mayoría de las personas ya han implementado en sus bibliotecas.