所以我只是对此感到好奇:
DataMapper 为其模型使用混合
class Post
include DataMapper::Resource
虽然active-record使用继承
class Post < ActiveRecord::Base
有谁知道为什么 DataMapper 选择这样做(或者为什么 AR 选择不这样做)?
最佳答案
它允许您从另一个不是 DM 类的类继承。
它还允许动态地将 DM 功能添加到类中。这是我正在处理的模块中的类方法:
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
这让我可以使用 SAXMachine 类(非常轻量级)并将其动态转换为 Datamapper 类,并使用它执行 DataMappery 操作。您甚至可以将其分配给对象的单例类。
我想这样可以减少我从 XML 导入 100K 对象时的内存占用(我不使用 DM 进行批量导入),并且只在需要时才混入更复杂的数据库函数
关于ruby-on-rails - 为什么 DataMapper 使用混合与继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1180271/