一个::基类的优缺点(而不是acts_as_foo)

时间:2009-08-12 18:45:22

标签: ruby-on-rails ruby-on-rails-plugins

而不是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?方法检查组件是否是硬件。

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

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

** acts_as_foo模式对于Rails宝石来说很常见。此类方法被添加到每个AR对象,在加载类时加载和扩展类和实例方法。

1 个答案:

答案 0 :(得分:0)

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

显然形成这个,如果你只想要一些模型的功能,最好使用acts_as_foo ......但是如果你想在每个模型中使用它,那么随意扩展Base。