2009-08-12 5 views
1

Plutôt qu'une syntaxe acts_as_foo **, je suis en train de jouer avec l'idée d'étendre ActiveSensor::Base < ActiveRecord::Base puis d'étendre cette classe de base avec toutes les méthodes d'erreurs/validations/class/whizbangs.Avantages/inconvénients d'une classe :: Base (plutôt que acts_as_foo)

proposé: # gem 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 

Plus: Je pense qu'il semble plus propre. L'architecture et l'accumulation de classes émulent ActiveRecord J'ai beaucoup de sous-classes ... je veux vérifier si un composant est matériel en utilisant la méthode :is_a?.

Moins: tenant une couche de classe d'héritage supplémentaire dans la mémoire ... jamais utilisé indépendamment pas très classiques (vu seulement 1 autres rails plug-in de le faire)

Un conseil? La création d'une nouvelle classe :: Base est-elle simplement stupide? Si oui, pourquoi?

** Le motif acts_as_foo est commun pour les gemmes Rails. Cette méthode de classe est ajoutée à chaque objet AR, qui charge et étend les méthodes de classe et d'instance lors du chargement de la classe.

Répondre

0

Je pense que vous avez déjà répondu. Tout simplement, si vous étendez Base, vous ajoutez la fonctionnalité à chaque classe Active Record de votre système, alors que si vous utilisez acts_as_foo, vous ne pouvez l'ajouter qu'aux modèles qui en ont besoin.

De toute évidence, il vaut mieux utiliser acts_as_foo si vous voulez seulement la fonctionnalité de certains de vos modèles ... mais si vous le souhaitez dans chaque modèle, n'hésitez pas à étendre Base.

Questions connexes