1

而不是acts_as_foo语法**,我正在玩弄ActiveSensor::Base < ActiveRecord::Base扩展这个基类的想法,然后用所有的错误/验证/类方法/whizbangs扩展这个基类。

建议:#active_sensor.rb gem

module ActiveSensor
  include ActiveRecord

  autoload :VERSION, 'active_sensor/version'
  autoload :ActiveSensorError, 'active_sensor/base'
  autoload :Base, 'active_sensor/base'
  autoload :Validations, 'active_sensor/validations'
end

优点:我认为它看起来更干净。体系结构和类构建模拟 ActiveRecord 我有很多子类化正在进行......想要使用:is_a?方法检查组件是否是硬件。

缺点:在内存中持有一个额外的继承类层......从来没有独立使用过,不是很传统(只见过 1 个其他 rails 插件这样做)

有什么建议吗?创建一个新的 ::Base 类只是愚蠢的吗?如果是这样,为什么?

** 该acts_as_foo模式在 Rails gem 中很常见。这个类方法被添加到每个 AR 对象中,它在加载类时加载和扩展类和实例方法。

4

1 回答 1

0

我想你已经回答了自己。很简单,如果您扩展 Base ,那么您将功能添加到系统中的每个 Active Record 类,而如果您使用acts_as_foo - 您只能将它添加到需要它的模型中。

显然,如果您只想要某些模型的功能,最好使用acts_as_foo ......但是如果您希望在每个模型中都使用它,那么请随意扩展Base。

于 2010-08-31T13:59:14.700 回答