Le permite heredar de otra clase que no es una clase de DM.
También permite agregar las características de DM a una clase sobre la marcha. He aquí un método de clase de un módulo que estoy trabajando en este momento:
def datamapper_class
klass = self.dup
klass.send(:include, DataMapper::Resource)
klass.storage_names[:default] = @table_name
klass.property(:id, DataMapper::Types::Serial)
klass.property(:created_at, DateTime, :nullable => false)
klass.property(:updated_at, DateTime, :nullable => false)
columns_with_types { |n, t| klass.property(n, t, :field => n.to_s) }
klass
end
Esto me permite tomar una clase SAXMachine (muy ligero) y convertirla en una clase DataMapper sobre la marcha, y hago DataMappery cosas con ella . Incluso podrías hacerlo a la clase singleton de un objeto.
Me gusta imaginar que esto reduce la huella de mi memoria cuando estoy importando 100K objetos de XML (no uso DM para las importaciones masivas) y solo mezclo las funciones de base de datos más complejas cuando las necesito
Pensé que podría ser una razón puramente 'filosófica' - Veamos lo que otras personas dicen. – cloudhead