ruby-on-rails - 为什么 DataMapper 使用混合与继承?

标签 ruby-on-rails ruby inheritance datamapper mixins

所以我只是对此感到好奇:

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/

相关文章:

php - 在接口(interface)中实现类型提示 'parent' 会引发错误

ruby-on-rails - Rails link_to 销毁嵌套资源?

ruby-on-rails - 如何检查日期是否有效?

ruby-on-rails - Rails - 使用复选框在数据库中存储多个值

javascript - 如何实时将text_field单词大写(不包括介词)?

ruby-on-rails - 将范围与部分 View 一起使用

ruby-on-rails - Capybara - 检查链接上是否存在数据属性

ruby - 与 ARGF#set_encoding 的混淆

C++ 将一个对象分配给另一个类

java - 为什么在扩展抽象类中需要另一个构造函数?