Apa sebenarnya Arel di Rails 3.0 itu?
Ini adalah model objek untuk aljabar operator kueri relasional.
Saya mengerti bahwa ini adalah pengganti ActiveRecord
Tidak, tidak. Ini adalah pengganti untuk kueri SQL yang dibuat dengan tangan dalam string. Ini adalah lapisan kueri umum yang mendasari ActiveRecord, tetapi juga dapat digunakan sebagai pendukung untuk DataMapper, misalnya.
Jika itu adalah pengganti untuk apa pun, itu adalah pengganti Ambisi. Atau, Anda dapat menganggapnya sebagai versi Ruby dari operator kueri standar LINQ atau SQLAlchemy Python. (Faktanya, penulis secara eksplisit mengutip LINQ dan SQLAlchemy sebagai inspirasi.)
Atau, Anda dapat melihatnya sebagai pengganti named_scope
s. Faktanya, ARel adalah realisasi dari gagasan bahwa "setiap kueri adalah named_scope
". Dan, whaddayaknow: keduanya ditulis oleh orang yang sama.
dan menggunakan objek, bukan kueri.
Tidak, ini menggunakan objek sebagai kueri.
mengapa ini lebih baik?
Ruby adalah bahasa berorientasi objek, bukan bahasa berorientasi string. Untuk alasan itu saja , masuk akal untuk merepresentasikan kueri sebagai objek, bukan string. Membangun model objek yang tepat untuk kueri alih-alih menggunakan string untuk semuanya memberi Anda manfaat yang hampir sama dengan membangun model objek yang tepat untuk sistem akuntansi daripada menggunakan string untuk semuanya memberi Anda.
Keuntungan besar lainnya adalah ARel mengimplementasikan aljabar sebenarnya dari operator kueri. Dengan kata lain, ARel tahu tentang aturan matematika untuk membangun dan menyusun kueri. Jika Anda menggabungkan dua string, yang masing-masing berisi kueri SQL yang valid, hasilnya mungkin tidak akan menjadi kueri SQL yang valid. Atau, lebih buruk lagi, ini adalah kueri SQL yang valid, tetapi tidak masuk akal, atau melakukan sesuatu yang sama sekali berbeda dari yang Anda pikirkan. Ini tidak akan pernah terjadi dengan ARel. (Inilah arti dari artikel yang saya tautkan di bawah dengan "komposisi tertutup".)
akankah objek / kueri "lebih mudah" dibuat?
Iya. Misalnya, seperti yang saya sebutkan di atas, jauh lebih mudah untuk membuat kueri yang lebih kompleks dari bagian yang lebih sederhana.
apakah ini akan menghasilkan kueri SQL yang lebih efisien?
Iya. Fakta bahwa ARel memiliki model objek yang tepat untuk kueri berarti bahwa ARel dapat melakukan pengoptimalan pada kueri tersebut jauh sebelum menghasilkan kueri SQL yang sebenarnya.
apakah itu akan kompatibel dengan semua DB utama? - Saya kira itu akan.
Iya. Sebenarnya, saya selalu berbicara tentang SQL di atas, tetapi sebenarnya aljabar kueri relasional dapat menghasilkan kueri untuk hampir semua hal. Sekali lagi, lihat LINQ atau Ambition sebagai contoh: keduanya dapat melakukan kueri SQL, LDAP, ActiveResource, CouchDB, Amazon, Google,… semuanya dengan sintaks yang sama.
Mungkin diskusi terbaik tentang apa itu ARel dan mengapa Nick Kallen menulis adalah artikel yang diberi nama tepat Mengapa Arel? oleh Nick Kallen sendiri. Catatan: artikel tersebut berisi beberapa jargon matematika dan ilmu komputer ringan, tetapi itulah intinya: ARel memiliki beberapa dasar yang kuat dalam matematika dan ilmu komputer, dasar-dasar itulah yang memberikan sifat-sifatnya yang kuat.