Rails 3.0'da Arel tam olarak nedir?
İlişkisel sorgu operatörlerinin bir cebiri için bir nesne modeli.
ActiveRecord'un yerine geçtiğini anlıyorum
Hayır, değil. Dizelerdeki el yapımı SQL sorgularının yerine geçer. ActiveRecord'un temelini oluşturan ortak bir sorgu katmanıdır , ancak örneğin DataMapper için bir destek olarak da kullanılabilir.
Herhangi bir şeyin yerini alacaksa, Ambition'ın yerine geçer. Veya, bunu LINQ standart sorgu operatörlerinin bir Ruby sürümü veya Python'un SQLAlchemy'si olarak düşünebilirsiniz. (Aslında, yazar ilham olarak hem LINQ hem de SQLAlchemy'den açıkça alıntı yapıyor.)
Veya, named_scope
s yerine bir tane olarak görebilirsiniz . Aslında ARel, "her sorgunun bir named_scope
" olduğu fikrinin hemen hemen farkındadır . Ve whaddayaknow: ikisi de aynı kişi tarafından yazılmıştır.
ve sorgular yerine nesneler kullandığını.
Hayır, nesneleri sorgu olarak kullanır .
bu neden daha iyi?
Ruby, dizgeli bir dil değil, nesne yönelimli bir dildir. Yalnızca bu nedenle , sorguları dizeler yerine nesneler olarak göstermek mantıklıdır. Her şey için dizeler kullanmak yerine sorgular için uygun bir nesne modeli oluşturmak, her şey için dizeler kullanmak yerine bir muhasebe sistemi için uygun bir nesne modeli oluşturmanın size sağladığı faydaların hemen hemen aynısını sağlar.
Diğer bir büyük avantaj, ARel'in gerçek bir sorgu operatörleri cebirini uygulamasıdır . Diğer bir deyişle, ARel, sorgu oluşturma ve oluşturmanın matematiksel kurallarını bilir. Her biri geçerli bir SQL sorgusu içeren iki dizeyi birleştirirseniz, sonuç büyük olasılıkla geçerli bir SQL sorgusu olmayacaktır. Ya da, daha da kötüsü, bu ise geçerli bir SQL sorgusu, ancak mantıklı değil bir, ya da sen öyle düşündüğün tamamen farklı bir şey yapar. ARel ile bu asla olmaz. (Aşağıda bağlantı verdiğim makale "kompozisyon altında kapalı" anlamına geliyor.)
nesnelerin / sorguların oluşturulması "daha kolay" olacak mı?
Evet. Örneğin, yukarıda da bahsettiğim gibi, daha basit kısımlardan daha karmaşık sorgular oluşturmak çok daha kolaydır.
daha verimli SQL sorgularına yol açacak mı?
Evet. ARel'in sorgular için uygun bir nesne modeline sahip olması, gerçek bir SQL sorgusu oluşturmadan çok önce bu sorgular üzerinde optimizasyonlar gerçekleştirebileceği anlamına gelir.
tüm büyük DB'lerle uyumlu olacak mı? - Olacağını varsayıyorum.
Evet. Aslında, yukarıda hep SQL'den bahsettim, ama aslında ilişkisel bir sorgu cebiri hemen hemen her şey için sorgular üretebilir. Örnek olarak yine LINQ veya Ambition'a bakın: her ikisi de SQL, LDAP, ActiveResource, CouchDB, Amazon, Google,… hepsi aynı sözdizimiyle sorgulayabilir.
ARel'in ne olduğu ve Nick Kallen'in neden yazdığına dair belki de en iyi tartışma, uygun bir şekilde adlandırılmış Neden Arel? Nick Kallen tarafından . Not: Makale bazı hafif matematiksel ve bilgisayar bilimleri jargonu içeriyor, ancak tam da bu nokta: ARel'in matematik ve bilgisayar bilimlerinde bazı güçlü temelleri var, bu temeller ona güçlü özelliklerini veren şeylerdir.