Para mí, SQL es una parte fundamental (en muchos casos, la mayoría) del código de lógica de negocios. Si intenta separarlo del código que opera en los datos devueltos, es más propenso a desequilibrar la comprensibilidad y la facilidad de mantenimiento del código.
Según lo miro, leer datos, procesar datos, escribir datos, buscar datos ... son operaciones similares, y se mantienen mejor en el mismo lugar.
Si comienza a sentir una duplicación de esfuerzos con las consultas, quizás necesite una vista de base de datos o un objeto que pueda encapsular ese aspecto del acceso a la base de datos.
Otro consejo es tener un buen método de consulta de base de datos. En el software que escribo (PostgreSQL, MySQL, SQL Server), me he asegurado de que la mayor parte de mis operaciones de consulta puedan tener lugar como una sola declaración de código.
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])
Esas son (aproximadamente) las llamadas a funciones principales que aseguro que son parte de mi "objeto de conexión". Depende del idioma, lo que realmente implemente, pero mi punto es mantenerlo realmente, realmente simple y sin dolor.
En resumen, trate a SQL como una parte nativa de la programación y no haga un resumen por el bien de la abstracción.