85 votes

Qu'est-ce qu'Arel dans Rails 3.0?

Je comprends que c’est un remplacement pour ActiveRecord et qu’il utilise des objets au lieu de requêtes.

Mais...

Pourquoi est-ce mieux ?

objets/requêtes sera « plus faciles » créer ?

il conduira à des requêtes SQL plus efficaces ?

il sera compatible avec tous les grands DBs ? -Je suppose que c’est.

il sera plus facile/difficile à utiliser avec les procédures stockées ?

182voto

Jörg W Mittag Points 153275

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_scopes. 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.

19voto

knowtheory Points 716

ARel, est malheureusement liée directement à la production de SQL et est donc impropre à DataMapper besoins.

La façon dont j'allais le mettre, c'est que ARel est une requête explicite de modèle pour ActiveRecord, qui produit et optimise les requêtes SQL pour RDBMSes.

DataMapper sur l'autre main est un véritable mappeur pour les données, et peut s'interfacer avec des données non relationnelles des magasins déjà. Dans l'avenir DataMapper est susceptible d'inclure une bibliothèque distincte appelée Veritas, qui est destiné à fournir relationnelle de la fonctionnalité des données provenant de TOUTE banque de données, pas seulement RDBMSes.

1voto

BServiss Points 11

Arel en 3 Rails rend les objets de relation où le Pb n’est pas interrogé jusqu'à ce que vous en avez besoin. Beaucoup plus efficace.

C’est aussi plus naturel (une fois que vous vous habituez à elle) qui est vraiment la grande force de Rails.

0voto

Snuggs Points 537

En fait, j’ai commencé une série de vidéos sur ActiveRelation.

Le premier tutoriel général peut être consulté à http://Innovative-Studios.com/#pilot

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X