कई डेटाबेस अमूर्त परतों के संपर्क में आने के बाद, मुझे आश्चर्य है कि डेटा को एक्सेस करने के लिए अपने स्वयं के अलग-अलग प्रतिमान का आविष्कार करने वाले प्रत्येक पुस्तकालय का क्या मतलब है। एक नई डीएएल को लेने से ऐसा लगता है कि एक नई भाषा को फिर से सीखना, जब मैं आमतौर पर सभी करना चाहता हूं, तो बस एसक्यूएल क्वेरी को आउटपुट करने के लिए परत को मनाएं जो मैंने पहले ही अपने सिर में लिखा है।
और यह तथ्य के बाद भी पठनीयता को छूने के बिना है:
# Exhibit A: A typical DAL
rows = db(db.ips_x_users.ip_addr == '127.0.0.1')
.inner_join(db.ips_x_users.user_id == db.users.id)
.select(order=(db.ips_x_users.last_seen, 'desc'), limit=10)
# Exhibit B: Another typical DAL
rows = db.ips_x_users
.join(db.users, on=db.ips_x_users.user_id == db.users.id)
.filter(db.ips_x_users.ip_addr == '127.0.0.1')
.select(sort=~db.ips_x_users, limit=10)
# Exhibit C: A hypothetical DAL based on standard SQL syntax
rows = db('''SELECT * FROM ips_x_users
INNER JOIN users ON
(ips_x_users.user_id = users.id)
WHERE ips_x_users.ip_addr = ip
ORDER BY last_seen DESC LIMIT 10''', ip='127.0.0.1')
मानक SQL सिंटैक्स में क्या गलत है? यह एक विशिष्ट उद्देश्य के लिए बनाया गया था, और यह उस उद्देश्य को खूबसूरती से फिट करता है। शायद यह सिर्फ मुझे है, लेकिन मैं स्निपेट सी को पहले दो की तुलना में अधिक आसानी से समझता हूं। नामांकित कीवर्ड और सिंटैक्स ट्रिक प्यारे होते हैं, लेकिन IMO, जब यह इसके ठीक नीचे आता है, तो वे कोडर के लिए पंक्तियों को पुनः प्राप्त करना आसान नहीं बनाते हैं।
यह शायद एक लंबे शेख़ी तरह लग रहा था, लेकिन वहाँ है यहाँ एक असली सवाल। चूँकि हर DAL कोशिश किए गए और सच्चे SQL को पार्स करने के बजाय प्रश्नों के लिए एक नए DSL का आविष्कार करता है, इसलिए या तो अलग-अलग सिंटैक्स का उपयोग करने के लाभ होने चाहिए, या मानक SQL सिंटैक्स में उन कमियों का उपयोग करना चाहिए जिनका मुझे एहसास नहीं है। क्या कोई यह बता सकता है कि मैं यहाँ क्या देख रहा हूँ?