1. ホーム
  2. ruby-on-rails

[解決済み] Rails 3.0のArelとは何ですか?

2023-05-12 02:54:59

質問

ActiveRecordの代替品で、クエリの代わりにオブジェクトを使用することは理解しています。

しかし...

なぜこの方がいいのか?

オブジェクトやクエリの作成が簡単になるのでしょうか?

より効率的なSQLクエリになるのでしょうか?

すべての主要なDBと互換性があるのでしょうか?- そうだと思います。

ストアドプロシージャは使いやすいですか、使いにくいですか。

どのように解決するのですか?

<ブロッククオート

Rails 3.0のArelとは一体何ですか?

リレーショナルクエリ演算子の代数をオブジェクトモデル化したものです。

<ブロッククオート

ActiveRecordの代替品であると理解しています。

いいえ、そうではありません。文字列で手作業でSQLクエリを作成するための代替品です。それは、共通のクエリ層である の下にある ActiveRecordの下敷きになっていますが、DataMapperなどの下敷きにもなります。

何かの代替になるとすれば、Ambitionの代替になります。あるいは、LINQの標準的なクエリ演算子やPythonのSQLAlchemyのRuby版と考えてもよいでしょう。(実際、著者はLINQとSQLAlchemyの両方をインスピレーションとして明示的に引用しています)。

の置き換えとして見ることもできます。 named_scope s. 実際、ARel は、"すべてのクエリは named_scope という考えを実現したものです。そして、なんと、どちらも同じ人物によって書かれたものなのです。

と、クエリの代わりにオブジェクトを使用していることです。

いいえ、オブジェクトを使用します。 として クエリとして使用します。

なぜこれが良いのでしょうか?

Rubyはオブジェクト指向の言語であり、文字列指向の言語ではありません。そのため だけ では、クエリを文字列ではなくオブジェクトとして表現することは理にかなっています。すべてに文字列を使用するのではなく、クエリのために適切なオブジェクトモデルを構築することは、すべてに文字列を使用するのではなく、会計システムのために適切なオブジェクトモデルを構築することとほぼ同じ利点をもたらします。

もう一つの大きな利点は、ARelが実際の 代数 を実装していることです。言い換えれば、ARelはクエリを構築し構成するための数学的ルールを知っているのです。2つの文字列を連結し、それぞれが有効なSQLクエリを含む場合、その結果はおそらく有効なSQLクエリにならないでしょう。あるいは、さらに悪いことに、それは は有効なSQLクエリだが、意味をなさない、あるいは思っていることと全く違うことをするものである。このような場合 決して ARel では起こり得ません (以下にリンクする記事で、"closed under composition" が意味するのは、このことです)。

オブジェクトやクエリの作成はより簡単になりますか?

そうです。例えば、上で述べたように、より複雑なクエリをより単純な部分から構築することがより簡単になります。

より効率的なSQLクエリにつながるのでしょうか?

ARelがクエリのための適切なオブジェクトモデルを持っているということは、実際のSQLクエリを生成するずっと前に、これらのクエリに対して最適化を実行することができるということなのです。

すべての主要なDBと互換性があるのでしょうか?- そうだと思います。

実は、上記ではいつもSQLについて話していますが、実はリレーショナルクエリ代数はほとんどすべてのものに対してクエリを生成することができるのです。もう一度、例としてLINQやAmbitionを見てみましょう。どちらも同じ構文でSQL、LDAP、ActiveResource、CouchDB、Amazon、Google、...すべてに問い合わせることができます。

ARel が何であるか、そしてなぜ Nick Kallen が書いたかについて、おそらく最も良い議論は、適切な名前の記事である なぜアーエルなのか? by Nick Kallen 自身によるものです。注:この記事には若干の数学とコンピュータ・サイエンスの専門用語が含まれていますが、それこそがポイントです。ARel は数学とコンピュータ サイエンスにおける強力な基盤を持っており、それらの基盤が ARel に強力な特性を与えているのです。