Это распространенный вариант использования при написании приложений на базе БД, когда нам необходимо динамически строить SQL-запросы на основе различных критериев фильтрации.

В Tokopedia мы разрабатывали функцию поиска для поиска в нашей базе данных на основе определенных критериев. Критерии поиска основывались на дополнительных фильтрах, которые пользователь мог применять при поиске.

Давайте рассмотрим конкретный сценарий, в котором мы можем искать все заявки на получение кредита по номеру телефона, электронной почте, статусу заявки, диапазону дат, когда заявки были поданы. В этом сценарии нам нужно создать запрос динамически, поскольку все эти фильтры являются необязательными. Для этого основной код будет выглядеть, как показано ниже.

Мы легко видим, что в приведенном выше коде много блоков If. Также большая часть кода избыточна, большую часть времени мы просто копируем, вставляем и меняем переменные, которые необходимо проверить в запросе. Чтобы упростить задачу, удалить избыточный код и сделать его более читабельным, мы создали библиотеку DQB.

DQB (Dynamic Query Builder) - это попытка удалить избыточные блоки if в очень простой и чистый код. Код для записи таких же условий в библиотеке DQB для вышеуказанного сценария будет выглядеть, как показано ниже.

Мы видим, что нет избыточных блоков кода, а общее количество строк кода (LOC) без использования DQB для вышеуказанного сценария составляет 25, а после использования DQB - 11. Кроме того, код чистый и более читаемый.

Вышеупомянутый пример был простым, более сложный сценарий может быть, когда у вас есть вложенные AND и OR или могут быть некоторые другие выражения в вашем предложении where. Давайте посмотрим на более сложный пример ниже.

В приведенном выше примере мы видим, что выражение IN используется напрямую. Функции И / ИЛИ принимают строки, поэтому мы можем добавлять любые настраиваемые строки.

Важно отметить, что любое пустое поле будет автоматически удалено из предложения where, поэтому, если адрес электронной почты пуст в поиске, DQB автоматически удалит его из критериев поиска.

Пожалуйста, дай мне знать, если возникнут какие-либо вопросы. Вы можете найти библиотеку DQB здесь!

Спасибо за прочтение!!