Для меня SQL является фундаментальной частью (во многих случаях, большинством) кода бизнес-логики. Если вы попытаетесь отделить его от кода, который работает с возвращенными данными, вы более склонны разбалансировать понятность и удобство сопровождения кода.
Когда я смотрю на это, чтение данных, обработка данных, запись данных, поиск данных ... все они являются похожими операциями и лучше всего хранятся в одном месте.
Если вы начинаете ощущать дублирование усилий с запросами, то, возможно, вам нужно представление базы данных или объект, который может инкапсулировать этот аспект доступа к базе данных.
Другой совет, чтобы действительно иметь хороший метод запроса к базе данных. В программном обеспечении, которое я пишу (PostgreSQL, MySQL, SQL Server), я гарантировал, что большая часть моих операций с запросами может выполняться как единое выражение кода.
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])
Это (примерно) основные вызовы функций, которые я гарантирую, являются частью моего "объекта соединения". Это зависит от языка, от того, что вы на самом деле реализуете, но моя цель - сделать его действительно очень простым и безболезненным.
Таким образом, рассматривайте SQL как неотъемлемую часть программирования и не абстрагируйтесь ради абстракции.