Qu'est-ce exactement Arel dans les Rails 3.0?
C'est un modèle d'objet pour une algèbre relationnelle opérateurs de requête.
Je comprends que c'est un remplacement pour ActiveRecord
Non, il n'est pas. C'est un remplacement pour l'artisanat des requêtes SQL dans des chaînes. C'est une commune de la couche de requête qui sous-tend ActiveRecord, mais il peut également être utilisé comme une base de DataMapper, par exemple.
Si c'est un remplacement pour rien, c'est un remplacement pour l'Ambition. Ou, vous pouvez la considérer comme une version de Ruby à des opérateurs de requête standard LINQ ou Python SQLAlchemy. (En fait, l'auteur cite explicitement les deux LINQ et SQLAlchemy inspirations.)
Ou, vous pouvez la voir comme un remplacement pour named_scope
s. En fait, ARel est à peu près la réalisation de l'idée que "chaque requête est une named_scope
". Et, whaddayaknow: les deux ont été écrits par le même gars.
et qu'il utilise des objets plutôt que des requêtes.
Non, il utilise des objets comme des requêtes.
pourquoi est-ce mieux?
Ruby est un langage orienté-objet, pas une chaîne langage orienté. Pour cette raison, à lui seul, il est logique pour représenter les requêtes comme des objets plutôt que des chaînes de caractères. La construction d'un bon modèle d'objet pour les requêtes au lieu d'utiliser des chaînes de caractères pour tout vous donne à peu près la même avantages que la construction d'un bon modèle d'objet pour un système de comptabilité au lieu d'utiliser des chaînes de caractères pour tout vous donne.
Un autre grand avantage est que ARel met en œuvre une véritable algèbre des opérateurs de requête. En d'autres termes, ARel connaît les règles mathématiques de la construction et de la composition de requêtes. Si vous concaténer deux chaînes, dont chacune contient une requête SQL valide, le résultat est probablement ne va pas être une requête SQL valide. Ou, pire encore, c' est une requête SQL valide, mais qui n'a pas de sens, ou qui fait quelque chose de totalement différent de ce que vous pensez que cela fonctionne. Cela peut ne jamais se produire avec ARel. (C'est ce que l'article que j'ai le lien ci-dessous: "fermé en vertu de composition".)
les objets/requêtes être "facile" de créer?
Oui. Par exemple, comme je l'ai mentionné ci-dessus, il est beaucoup plus facile de construire des requêtes plus complexes à partir des pièces plus simples.
il va permettre de renforcer l'efficacité des requêtes SQL?
Oui. Le fait que ARel a un bon modèle d'objet pour les requêtes qui signifie qu'il peut procéder à des optimisations sur ces requêtes longtemps avant qu'il ne génère un réel requête SQL.
il sera compatible avec tous les principaux DBs? - Je suppose qu'il sera.
Oui. En fait, j'ai toujours parlé de SQL ci-dessus, mais en fait, une requête relationnelle de l'algèbre peut générer des requêtes pour à peu près tout. Encore une fois, voir LINQ ou de l'Ambition à titre d'exemples: les deux peuvent requête SQL, LDAP, ActiveResource, CouchDB, Amazon, Google, ... le tout avec la même syntaxe.
Peut-être le meilleur de la discussion pour ce ARel est et pourquoi Nick Kallen écrit, c'est l'intitulé de l'article Pourquoi Arel? par Nick Kallen lui-même. Remarque: l'article contient un peu de mathématiques et d'informatique jargon, mais c'est exactement le point: ARel a certains des bases solides en mathématiques et en informatique, ces fondations sont ce qui donne à ses puissantes propriétés.