Это распространенный вариант использования при написании приложений на базе БД, когда нам необходимо динамически строить SQL-запросы на основе различных критериев фильтрации.
В Tokopedia мы разрабатывали функцию поиска для поиска в нашей базе данных на основе определенных критериев. Критерии поиска основывались на дополнительных фильтрах, которые пользователь мог применять при поиске.
Давайте рассмотрим конкретный сценарий, в котором мы можем искать все заявки на получение кредита по номеру телефона, электронной почте, статусу заявки, диапазону дат, когда заявки были поданы. В этом сценарии нам нужно создать запрос динамически, поскольку все эти фильтры являются необязательными. Для этого основной код будет выглядеть, как показано ниже.
Мы легко видим, что в приведенном выше коде много блоков If. Также большая часть кода избыточна, большую часть времени мы просто копируем, вставляем и меняем переменные, которые необходимо проверить в запросе. Чтобы упростить задачу, удалить избыточный код и сделать его более читабельным, мы создали библиотеку DQB.
DQB (Dynamic Query Builder) - это попытка удалить избыточные блоки if в очень простой и чистый код. Код для записи таких же условий в библиотеке DQB для вышеуказанного сценария будет выглядеть, как показано ниже.
Мы видим, что нет избыточных блоков кода, а общее количество строк кода (LOC) без использования DQB для вышеуказанного сценария составляет 25, а после использования DQB - 11. Кроме того, код чистый и более читаемый.
Вышеупомянутый пример был простым, более сложный сценарий может быть, когда у вас есть вложенные AND и OR или могут быть некоторые другие выражения в вашем предложении where. Давайте посмотрим на более сложный пример ниже.
В приведенном выше примере мы видим, что выражение IN используется напрямую. Функции И / ИЛИ принимают строки, поэтому мы можем добавлять любые настраиваемые строки.
Важно отметить, что любое пустое поле будет автоматически удалено из предложения where, поэтому, если адрес электронной почты пуст в поиске, DQB автоматически удалит его из критериев поиска.
Пожалуйста, дай мне знать, если возникнут какие-либо вопросы. Вы можете найти библиотеку DQB здесь!
Спасибо за прочтение!!