Setelah terkena banyak lapisan abstraksi database, saya mulai bertanya-tanya apa gunanya setiap perpustakaan menciptakan paradigma mereka sendiri yang berbeda untuk mengakses data. Mengambil DAL baru terasa seperti mempelajari bahasa baru lagi, ketika biasanya yang ingin saya lakukan hanyalah meyakinkan layer untuk menampilkan query SQL yang sudah saya tulis di kepala saya.
Dan itu bahkan tanpa menyentuh keterbacaan setelah fakta:
# 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')
Apa yang salah dengan sintaks SQL standar? Itu diciptakan untuk tujuan tertentu, dan itu cocok dengan tujuan itu dengan indah. Mungkin hanya aku, tapi aku mengerti potongan C jauh lebih mudah daripada dua yang pertama. Kata kunci yang diubah namanya dan trik sintaksinya lucu, tetapi IMO, ketika sampai pada itu, mereka tidak membuat mengambil baris lebih mudah bagi pembuat kode.
Ini mungkin tampak seperti kata-kata kasar yang panjang, tapi ada adalah pertanyaan yang nyata di sini. Karena setiap DAL tampaknya menciptakan DSL baru untuk kueri daripada hanya menguraikan SQL yang coba-dan-benar, pasti ada manfaat menggunakan sintaks yang berbeda, atau kekurangan dalam sintaks SQL standar yang saya tidak sadari ada di sana. Adakah yang bisa menunjukkan apa yang saya lihat di sini?