หลังจากได้สัมผัสกับเลเยอร์สิ่งที่เป็นนามธรรมหลายชั้นฉันเริ่มสงสัยว่าประเด็นใดที่ห้องสมุดทุกแห่งคิดค้นกระบวนทัศน์ที่แตกต่างกันของพวกเขาเองในการเข้าถึงข้อมูล การรับ DAL ใหม่รู้สึกเหมือนได้เรียนรู้ภาษาใหม่อีกครั้งเมื่อสิ่งที่ฉันต้องการทำคือการโน้มน้าวให้เลเยอร์ส่งออกแบบสอบถาม SQL ที่ฉันได้เขียนไปแล้วในหัวของฉัน
และนั่นคือโดยไม่ต้องสัมผัสกับการอ่านหลังจากข้อเท็จจริง:
# 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 มาตรฐาน มันถูกสร้างขึ้นเพื่อวัตถุประสงค์เฉพาะและมันเหมาะกับวัตถุประสงค์นั้นอย่างสวยงาม อาจจะเป็นแค่ฉัน แต่ฉันเข้าใจตัวอย่าง C ได้ง่ายกว่าสองอย่างแรก คำหลักและกลวิธีทางไวยากรณ์ที่ถูกเปลี่ยนชื่อนั้นน่ารัก แต่ IMO เมื่อมันมาถึงมันจะไม่ทำให้การเรียกแถวง่ายขึ้นสำหรับ coder
นี้อาจดูเหมือนพูดจาโผงผางยาว แต่มีเป็นคำถามที่จริงที่นี่ เนื่องจาก DAL ทุกอันดูเหมือนจะคิดค้น DSL ใหม่สำหรับการสืบค้นแทนที่จะแยกวิเคราะห์ SQL ที่พยายามแล้วและจริงต้องมีประโยชน์จากการใช้ไวยากรณ์ที่แตกต่างกันหรือข้อบกพร่องในไวยากรณ์ SQL มาตรฐานที่ฉันไม่ทราบ ใครช่วยกรุณาชี้ให้เห็นสิ่งที่ฉันมองเห็นที่นี่?