2010-08-03 4 views
1

Pour obtenir tous les goodies ActiveRecord votre classe doit hériter de ActiveRecord::Base:Pourquoi ActiveRecord n'est-il pas un module?

class Post < ActiveRecord::Base 

Pourquoi ne pas demander à l'utilisateur de include ActiveRecord comme module à la place? L'avantage de cette approche est que Rails peut inclure automatiquement ActiveRecord dans toutes les classes du répertoire models, ce qui le rend totalement transparent pour l'utilisateur. I.e .:

class Post # no `< ActiveRecord::Base`! 

Est-ce un défaut de conception (relativement mineur) dans Rails?

Répondre

1

ActiveRecord n'est pas en veille prolongée. Les modèles ActiveRecord ne sont pas des modèles purs - ce sont des enregistrements actifs explicites et suivent la sémantique du modèle Active Record.

Ceci n'est pas un défaut de conception. C'est un objectif de conception complètement différent. Je voudrais certainement voir un Hibernate Ruby. Mais ActiveRecord n'est-ce pas.

Martin Fowler describes un dossier actif comme:

Un objet qui enveloppe une ligne dans une table de base de données ou une vue, encapsule l'accès base de données et ajoute la logique de domaine sur ces données.

+0

Est-ce que DataMapper ne ressemble pas à Hibernate? (Seulement nouveau à ruby ​​donc cela pourrait être un malentendu.) –

Questions connexes