clo*_*ead 5 ruby inheritance ruby-on-rails datamapper mixins
所以我只是好奇这个:
DataMapper为其模型使用mixin
class Post
include DataMapper::Resource
Run Code Online (Sandbox Code Playgroud)
而active-record使用继承
class Post < ActiveRecord::Base
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么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
Run Code Online (Sandbox Code Playgroud)
这让我可以使用SAXMachine类(非常轻量级)并将其转换为Datamapper类,并使用它来执行DataMappery.你甚至可以将它转换为对象的单例类.
我想,当我从XML导入100K对象时,这会降低我的内存占用量(我不使用DM进行大量导入),只在我需要它时混合使用更复杂的数据库函数
我认为这个想法是 ActiveRecord 将数据库支持的方面视为模型类的关键功能,因此它继承了该行为。DataMapper 看起来似乎认为数据库支持只是可以添加到类中的类的一个方面。
这是我的猜测。耶胡达·卡茨可以明确地告诉你。
| 归档时间: |
|
| 查看次数: |
1520 次 |
| 最近记录: |