я надам відповідь на основі файлу readme користувальницького SQL-конструктора ( Dialect )
(простий текст випливає, видалені посилання на конкретні бібліотеки)
Вимоги
- Підтримка декількох постачальників БД (наприклад, MySQL, PostgreSQL, SQLite, MS SQL / SQL Server, Oracle, DB2, ..)
- Легко поширюється на нові БД (бажано через налаштування конфігурації, незалежне від впровадження)
- Модульність та незалежність від передачі
- Гнучкий та інтуїтивний API
Особливості
- шаблони на основі граматики
- спеціальна підтримка м'яких поглядів
- db абстракція, модульність та переносимість
- підготовлені шаблони
- отримання даних
Я думаю, що наведені вище функції та вимоги змальовують причини, з яких можна використовувати конструктор абстракцій SQL
Більшість перерахованих вище функцій підтримується більшістю SQL-будівельників (хоча я не думаю, що всі перераховані підтримуються, наскільки мені відомо)
Приклади використання:
- Платформа CMS, здатна працювати (без зміни базового коду) з декількома постачальниками БД
- Спеціальний код програми, де постачальник БД схильний змінювати та / або схеми dB є динамічними (це означає, що багато запитів не можуть бути жорстко кодованими, але все-таки повинні бути досить абстраговані, щоб код надійний до змін)
- Прототипування з іншою БД, ніж використовується у виробництві (зажадає дублювання бази коду принаймні для деякого коду)
- Код програми не щільно пов'язаний з конкретним постачальником БД та / або реалізацією (навіть у межах одного постачальника БД, наприклад, різних версій постачальника БД), таким чином, є більш надійним, гнучким та модульним
- Багато звичайних випадків запитів і отримання даних обробляються самими рамками, і зазвичай це оптимально і швидше
Нарешті, приклад використання у мене був. я будував додаток, коли основна схема БД (wordpress) була недостатньо підходяща для типу запитів даних, які потрібно було виконати, плюс деякі таблиці WP (наприклад, пости) повинні були використовуватися (тому маючи абсолютно нові таблиці для всіх додатків дані не були варіантами).
У такому випадку можливість зробити MVC-подібну програму, де модель може бути запитана за допомогою спеціальних / динамічних умов, що робить запит жорстким кодуванням майже кошмаром. Уявіть, що вам слід підтримувати запит, можливо, до 2-3 таблиць з об'єднаннями та фільтруючи умови, щоб побачити, до якої таблиці слід приєднатись, а також подбати про необхідні псевдоніми тощо.
Зрозуміло, що це був випадок використання абстракції запитів, і, ще більше, йому потрібно було (або принаймні значною мірою вигоди) мати можливість визначати спеціальні м'які подання (конгломерат об'єднаних таблиць, як якщо б це була одна спеціальна таблиця, яка підходить для моделі) . Тоді було набагато простіше, чистіше, модульніше та гнучкіше. В іншому аспекті додаток (код) також використовував рівень абстракції запитів як інструмент нормалізації (db-схеми) . Як кажуть деякі, це було впевнене у майбутньому .
Якщо завтра люди вирішать, що їм потрібні додаткові параметри чи дані, дуже легко додати це до моделі в пару ліній і працювати нормально. Крім того, якщо, наприклад, люди вирішують, що не хочуть більше використовувати WordPress (оскільки додаток вільно поєднується з wordpress як плагін), це також досить легко змінити ( лише визначення ) моделей за пару рядків коду для адаптації до нової схеми.
Подивіться, що я маю на увазі?