Sau khi tiếp xúc với nhiều lớp trừu tượng cơ sở dữ liệu, tôi bắt đầu tự hỏi điểm nào của mỗi thư viện phát minh ra mô hình khác nhau của riêng họ để truy cập dữ liệu. Nhặt một DAL mới có cảm giác như học lại một ngôn ngữ mới, khi mà tất cả những gì tôi muốn làm chỉ là thuyết phục lớp đưa ra một truy vấn SQL mà tôi đã viết trong đầu.
Và đó thậm chí không chạm vào khả năng đọc sau khi thực tế:
# 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')
Có gì sai với cú pháp SQL chuẩn? Nó được tạo ra cho một mục đích cụ thể, và nó phù hợp với mục đích đó một cách tuyệt đẹp. Có lẽ đó chỉ là tôi, nhưng tôi hiểu đoạn trích C dễ dàng hơn nhiều so với hai đoạn đầu. Các từ khóa được đổi tên và các thủ thuật cú pháp rất dễ thương, nhưng IMO, khi nói đến nó, chúng không giúp việc lấy hàng trở nên dễ dàng hơn cho người viết mã.
Điều này có lẽ dường như là một rant dài, nhưng có là một câu hỏi thực sự ở đây. Vì mọi DAL dường như phát minh ra DSL mới cho các truy vấn thay vì chỉ phân tích cú pháp SQL đã thử và đúng, nên phải có các lợi ích của việc sử dụng cú pháp khác nhau hoặc thiếu sót trong cú pháp SQL tiêu chuẩn mà tôi không nhận ra là có. Bất cứ ai có thể xin vui lòng chỉ ra những gì tôi đang xem ở đây?