Arel in Rails 3.0 คืออะไร?
เป็นแบบจำลองวัตถุสำหรับพีชคณิตของตัวดำเนินการแบบสอบถามเชิงสัมพันธ์
ฉันเข้าใจว่ามันเป็นการแทนที่ ActiveRecord
ไม่มันไม่ใช่ เป็นการแทนที่แบบสอบถาม SQL ที่สร้างด้วยมือในสตริง เป็นเลเยอร์การสืบค้นทั่วไปที่อยู่ภายใต้ ActiveRecord แต่ยังสามารถใช้เป็นส่วนเสริมสำหรับ DataMapper ได้เช่นกัน
หากเป็นการแทนที่สิ่งใดสิ่งหนึ่งจะเป็นการแทนที่ Ambition หรือคุณอาจคิดว่ามันเป็นเวอร์ชัน Ruby ของตัวดำเนินการสืบค้นมาตรฐาน LINQ หรือ SQLAlchemy ของ Python (ในความเป็นจริงผู้เขียนอ้างถึงทั้ง LINQ และ SQLAlchemy อย่างชัดเจนว่าเป็นแรงบันดาลใจ)
หรือคุณสามารถมองว่ามันใช้แทนnamed_scope
s ในความเป็นจริง ARel ค่อนข้างตระหนักถึงแนวคิดที่ว่า "ทุกการสืบค้นคือ a named_scope
" และ whaddayaknow: ทั้งคู่เขียนโดยผู้ชายคนเดียวกัน
และใช้วัตถุแทนการสืบค้น
ไม่ใช้วัตถุเป็นแบบสอบถาม
ทำไมถึงดีกว่านี้?
Ruby เป็นภาษาเชิงวัตถุไม่ใช่ภาษาเชิงสตริง ด้วยเหตุนี้เพียงอย่างเดียวจึงเหมาะสมที่จะแสดงคิวรีเป็นอ็อบเจกต์แทนสตริง การสร้างโมเดลอ็อบเจ็กต์ที่เหมาะสมสำหรับคิวรีแทนที่จะใช้สตริงสำหรับทุกสิ่งจะให้คุณได้รับประโยชน์เช่นเดียวกันกับการสร้างโมเดลอ็อบเจ็กต์ที่เหมาะสมสำหรับระบบบัญชีแทนที่จะใช้สตริงสำหรับทุกสิ่ง
ข้อดีอีกอย่างคือ ARel ใช้พีชคณิตจริงของตัวดำเนินการสืบค้น กล่าวอีกนัยหนึ่ง ARel รู้เกี่ยวกับกฎทางคณิตศาสตร์สำหรับการสร้างและการเขียนคำค้นหา หากคุณเชื่อมสตริงสองสตริงเข้าด้วยกันซึ่งแต่ละสตริงมีคิวรี SQL ที่ถูกต้องผลลัพธ์อาจจะไม่ใช่คิวรี SQL ที่ถูกต้อง หรือที่แย่กว่านั้นคือเป็นแบบสอบถาม SQL ที่ถูกต้อง แต่เป็นแบบสอบถามที่ไม่สมเหตุสมผลหรือมีบางอย่างที่แตกต่างไปจากที่คุณคิดโดยสิ้นเชิง สิ่งนี้ไม่สามารถเกิดขึ้นได้กับ ARel (นี่คือสิ่งที่บทความที่ฉันลิงก์ไปด้านล่างหมายถึง "ปิดภายใต้การเรียบเรียง")
ออบเจ็กต์ / คิวรีจะสร้าง "ง่ายกว่า" ไหม
ใช่. ตัวอย่างเช่นดังที่ฉันได้กล่าวไว้ข้างต้นการสร้างแบบสอบถามที่ซับซ้อนขึ้นจากส่วนที่ง่ายกว่านั้นง่ายกว่ามาก
จะนำไปสู่การสืบค้น SQL ที่มีประสิทธิภาพมากขึ้นหรือไม่?
ใช่. ความจริงที่ว่า ARel มีโมเดลอ็อบเจ็กต์ที่เหมาะสมสำหรับคิวรีหมายความว่าสามารถทำการปรับให้เหมาะสมกับคิวรีเหล่านั้นได้นานก่อนที่จะสร้างคิวรี SQL จริง
จะเข้ากันได้กับฐานข้อมูลหลักทั้งหมดหรือไม่ - ฉันคิดว่ามันจะ
ใช่. อันที่จริงฉันมักจะพูดถึง SQL ด้านบน แต่จริงๆแล้วพีชคณิตแบบสอบถามเชิงสัมพันธ์สามารถสร้างแบบสอบถามสำหรับทุกสิ่งได้ อีกครั้งดู LINQ หรือ Ambition เป็นตัวอย่าง: ทั้งสองสามารถสืบค้น SQL, LDAP, ActiveResource, CouchDB, Amazon, Google, ... ทั้งหมดด้วยไวยากรณ์เดียวกัน
บางทีการอภิปรายที่ดีที่สุดเกี่ยวกับ ARel คืออะไรและทำไม Nick Kallen จึงเขียนเป็นบทความชื่อ aptly Why Arel? โดย Nick Kallenเอง หมายเหตุ: บทความนี้มีศัพท์แสงทางคณิตศาสตร์และวิทยาศาสตร์คอมพิวเตอร์เล็กน้อย แต่นั่นคือประเด็น: ARel มีพื้นฐานที่แข็งแกร่งในคณิตศาสตร์และวิทยาศาสตร์คอมพิวเตอร์รากฐานเหล่านี้คือสิ่งที่ให้คุณสมบัติที่ทรงพลัง