12. Типобезопасный билдер запросов
СложноРеализуйте fluent-паттерн Query Builder с цепочкой вызовов: select, where, orderBy, limit, execute.
Каждый способ должен быть реализован независимо в своём контейнере:
- select задаёт поля для выборки
- where добавляет условия фильтрации (можно несколько)
- orderBy задаёт сортировку
- limit задаёт ограничение
- build возвращает объект запроса
- Методы поддерживают цепочку вызовов
Реализуйте класс QueryBuilder для построения SQL-подобных запросов: - select(...fields) — задаёт поля для выборки - where(field, operator, value) — добавляет условие (поддержка нескольких) - orderBy(field, direction) — сортировка ('asc' | 'desc') - limit(n) — ограничение количества - build() — возвращает объект запроса Каждый метод (кроме build) возвращает this для цепочки вызовов. Пример: new QueryBuilder() .select('name', 'email') .where('age', '>', 18) .where('active', '=', true) .orderBy('name', 'asc') .limit(10) .build() Результат: { fields: ['name', 'email'], conditions: [ { field: 'age', operator: '>', value: 18 }, { field: 'active', operator: '=', value: true } ], order: { field: 'name', direction: 'asc' }, limit: 10 }
Примеры
new QueryBuilder().select('name').where('age', '>', 18).limit(10).build(){ fields: ['name'], conditions: [{ field: 'age', operator: '>', value: 18 }], order: null, limit: 10 }
Каждый метод добавляет свою часть запроса, build() собирает итоговый объект
Ограничения
- Не использовать сторонние библиотеки