Đối với tôi, SQL là một phần cơ bản (trong rất nhiều trường hợp, phần lớn) của mã logic nghiệp vụ. Nếu bạn cố tách nó ra khỏi mã hoạt động trên dữ liệu được trả về, bạn sẽ dễ bị mất cân bằng về tính dễ hiểu và khả năng duy trì của mã.
Khi tôi nhìn vào nó, đọc dữ liệu, xử lý dữ liệu, ghi dữ liệu, tìm kiếm dữ liệu ... chúng đều là các hoạt động tương tự và tốt nhất được giữ ở cùng một nơi.
Nếu bạn bắt đầu cảm thấy sự trùng lặp các nỗ lực với các truy vấn, thì có lẽ bạn cần một chế độ xem cơ sở dữ liệu hoặc một đối tượng có thể gói gọn khía cạnh đó của truy cập cơ sở dữ liệu.
Một mẹo khác là thực sự có một phương pháp truy vấn cơ sở dữ liệu tốt. Trong phần mềm tôi viết (PostgreSQL, MySQL, SQL Server), tôi đã đảm bảo rằng phần lớn các hoạt động truy vấn của tôi có thể diễn ra dưới dạng một câu lệnh mã.
GetValue(SQL, [transaction], [array_of_params])
GetRow(SQL, [transaction], [array_of_params])
GetRowList(SQL, [transaction], [array_of_params])
GetValueList(SQL, [transaction], [array_of_params])
Execute(SQL, [transaction], [array_of_params])
Đó là (đại khái) các lệnh gọi hàm chính mà tôi đảm bảo là một phần của "đối tượng kết nối" của tôi. Nó phụ thuộc vào ngôn ngữ, những gì bạn thực sự thực hiện, nhưng quan điểm của tôi là giữ cho nó thực sự, thực sự đơn giản và không đau.
Tóm lại, coi SQL như một phần bản địa của lập trình và không trừu tượng vì mục đích trừu tượng.