Должен ли объект запроса выполнять запрос самостоятельно? - PullRequest
0 голосов
/ 21 декабря 2009

После того, как я заполнил данными объект запроса , должен ли быть объект, который выполняет запрос (объект запроса заполнен как параметр метода), или объект должен выполнить запрос сам по себе?

Ответы [ 2 ]

2 голосов
/ 21 декабря 2009

Что-то еще должно выполнить запрос.

Если вы не нарушаете SRP , поскольку запрос содержит как спецификацию запроса, так и его выполнение.

Подумайте, например, как это делается в LINQ-to-SQL. В LINQ-to-SQL вы можете рассматривать деревья выражений как представляющие спецификации запросов, и поставщик LINQ-to-SQL должен интерпретировать дерево выражений и преобразовать его в SQL.

Так и должно быть. Если у вас есть объект запроса, который также выполняет запрос, то вы связали спецификацию запроса со спецификой того, где вы выполняете запрос. Скорее, они должны быть отдельными, чтобы объект запроса можно было повторно использовать в других контекстах (запрос к базе данных, запрос к коллекции в памяти и т. Д.). Опять же, это как в LINQ. Дерево выражений может использоваться в LINQ-to-SQL, LINQ-to-objects и LINQ-to-XML без изменений.

1 голос
/ 21 декабря 2009

Реальный вопрос здесь заключается в следующем: относится ли ответственность за запрос (и, возможно, перечисление) источника данных к объекту запроса?

Ответ может часто меняться между различными структурами / решениями, однако, по крайней мере, для меня Query Object должен представлять спецификацию того, каким данным вы должны соответствовать. Это главная ответственность.

Он не должен знать, как обращаться к БД через какой-либо доступный API данных, скорее он должен использоваться службой / компонентом, который понимает, как сопоставить объект запроса с любым резервным хранилищем, которое он использует.

Таким образом, вы можете потенциально использовать разные источники данных с одним и тем же объектом запроса, а также позволить клиентам создавать и передавать объекты спецификации запроса на сервер (это может быть лучшим решением, чем использование серверных методов с множеством параметров).

Если изменить механизм доступа к данным (например, с исходного SQL на Hibernate), ничего с объектами запроса не придется менять, если сделать это таким образом (потенциально может быть много разных объектов запроса) - только объекты, отвечающие за отображение Объекты запроса к фактическим запросам должны будут измениться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...