ActiveRecordの代わりであり、クエリの代わりにオブジェクトを使用することを理解しています。
だが...
なぜこれが良いのですか?
オブジェクト/クエリは「簡単に」作成できますか?
それはより効率的なSQLクエリにつながりますか?
すべての主要なDBと互換性がありますか?-そうなると思います。
ストアドプロシージャでの使用は簡単/困難ですか?
回答:
Rails 3.0のArelとは正確には何ですか?
これは、リレーショナルクエリ演算子の代数のオブジェクトモデルです。
ActiveRecordの代わりになることを理解しています
いいえ、そうではありません。これは、文字列で手作りするSQLクエリに代わるものです。これはActiveRecordの基礎となる一般的なクエリレイヤーですが、たとえばDataMapperの基盤としても使用できます。
それが何かの代わりであるなら、それは野心の代わりです。または、LINQ標準クエリ演算子のRubyバージョンまたはPythonのSQLAlchemyと考えることもできます。(実際、著者はLINQとSQLAlchemyの両方をインスピレーションとして明示的に引用しています。)
または、named_scope
sの代わりとして見ることができます。実際、ARelは、「すべてのクエリは」という考えをほぼ実現したものですnamed_scope
。そして、whaddayaknow:両方とも同じ男によって書かれました。
クエリの代わりにオブジェクトを使用すること。
いいえ、オブジェクトをクエリとして使用します。
なぜこれが良いのですか?
Rubyはオブジェクト指向言語であり、文字列指向言語ではありません。その理由だけで、クエリを文字列ではなくオブジェクトとして表すことは理にかなっています。すべてに文字列を使用する代わりにクエリに適切なオブジェクトモデルを構築すると、すべてに文字列を使用する代わりに会計システムに適切なオブジェクトモデルを構築するのとほぼ同じ利点が得られます。
もう1つの大きな利点は、ARelがクエリ演算子の実際の代数を実装することです。言い換えると、ARelは、クエリを作成および作成するための数学的規則について知っています。それぞれに有効なSQLクエリが含まれている2つの文字列を連結すると、結果はおそらく有効なSQLクエリにはなりません。または、さらに悪いことに、それは有効なSQLクエリですが、意味がないか、またはあなたが思っていることとはまったく異なることをします。これはARelでは決して起こり得ません。(これは、以下にリンクする記事が「構成の下で閉じられた」という意味です。)
オブジェクト/クエリは「簡単に」作成できますか?
はい。たとえば、前述したように、単純なパーツからより複雑なクエリを作成する方がはるかに簡単です。
それはより効率的なSQLクエリにつながりますか?
はい。ARelがクエリに対して適切なオブジェクトモデルを持っているという事実は、実際のSQLクエリを生成するずっと前にそれらのクエリに対して最適化を実行できることを意味します。
すべての主要なDBと互換性がありますか?-そうなると思います。
はい。実際、私は常に上記のSQLについて話しましたが、実際には、リレーショナルクエリ代数はほとんどすべてのクエリを生成できます。繰り返しになりますが、例としてLINQまたはAmbitionを参照してください。どちらもSQL、LDAP、ActiveResource、CouchDB、Amazon、Googleなどをすべて同じ構文でクエリできます。
おそらく、ARelとは何か、そしてNick Kallenが書いた理由についての最良の議論は、適切な名前の記事、Why Arel?ニック・カレン自身による。注:この記事には、数学とコンピューターサイエンスの専門用語がいくつか含まれていますが、まさにそれがポイントです。ARelには、数学とコンピューターサイエンスの強力な基盤があり、それらの基盤が強力な特性をもたらします。
ARelは、残念ながらSQLの生成に直接関係しているため、DataMapperのニーズには適していません。
私が言いたいのは、ARelはRDBMSのSQLクエリを生成して最適化するActiveRecordの明示的なクエリモデルであるということです。
一方、DataMapperはデータ用の本物のマッパーであり、すでに非リレーショナルデータストアとインターフェイスできます。将来、DataMapperには、Veritasと呼ばれる別のライブラリが含まれる可能性があります。これは、RDBMSだけでなく、任意のデータストアから供給されるデータにリレーショナル機能を提供することを目的としています。
実際、私はActiveRelationのビデオシリーズを始めました。
最初の一般的なチュートリアルはhttp://Innovative-Studios.com/#pilotで見ることができます