Показать сообщение отдельно
Старый 19.08.2010, 19:12   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Мне лично Query больше нравится тем, что:
  • можно разбить логику построения запроса на несколько методов, а их - выборочно перекрывать в различных классах-наследниках; для while select нужно либо переписывать запрос целиком, либо в базовом классе предусматривать все возможные условия в запросе и цеплять их тем способом, который был представлен (!flag || condition), что не прибавляет коду наглядности и понятности;
  • после добавления всех нужных условий по Query легко увидеть без включения трассировки, какой же в результате запрос получился;
  • Query можно передать в другой кусок кода, который не знает, как он был сформирован, а только знает, записи из какой таблицы нужно выбирать;
  • Query можно легко переделать для рассчета каких-нить агрегатов вместо перебора записей (бывает, люди хотят видеть на форме поле с суммой по всем записям, удовлетворяющим текущему запросу, - с Query это сделать проще простого);
  • в Query не надо извращаться, если какой-то datasource нужно цеплять только по определенному условию, потому что этому datasource'у можно сказать enabled(false) - и он уже не попадет в запрос;
  • при использовании Query по умолчанию включена RLS - в случае чего, не надо потом бегать и в куче мест дописывать перед запросом salesTable.recordLevelSecurity( true ).