2009-08-12 2 views
1

Вместо синтаксиса acts_as_foo **, я играю идею с расширением ActiveSensor::Base < ActiveRecord::Base, а затем расширяет этот базовый класс всеми методами ошибок/валидности/класса/whizbangs.pros/cons of :: Base class (а не act_as_foo)

Предлагаемый: # active_sensor.rb камень

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 

Pros: Я думаю, что это выглядит чище. Архитектура и класс наращивания эмулирует ActiveRecord У меня много подклассов продолжается ... хочу проверить, является ли компонент аппаратным, используя метод :is_a?.

Минусы: держит дополнительный слой класса наследования в памяти ... никогда не используется самостоятельно не очень обычные (только видели 1 другие рельсы плагин сделать это)

Любые советы? Создает ли новый класс: Base просто тупой? Если да, то почему?

** Модель acts_as_foo общий для Rails драгоценных камней. Этот метод класса добавляется к каждому объекту AR, который загружает и расширяет методы класса и экземпляра при загрузке класса.

ответ

0

Думаю, вы уже ответили сами. Достаточно просто, если вы расширите Base, вы добавите функциональность для каждого класса Active Record в вашей системе, тогда как если вы используете act_as_foo - вы можете добавить его только к моделям, которые этого требуют.

Очевидно, что это форма, лучше использовать act_as_foo, если вы хотите только функциональность для некоторых ваших моделей ... но если вы хотите, чтобы она была в каждой модели, тогда не стесняйтесь расширять Base.

Смежные вопросы