Де JDBC-сумісний додаток повинен зберігати свої SQL-заяви і чому?
Поки мені вдалося визначити такі варіанти:
- Твердо кодований у бізнес-об'єктах
- Вбудований у пропозиції SQLJ
- Інкапсулюйте в окремі класи, наприклад, Об'єкти доступу до даних
- Метадані, що керуються (від'єднайте об'єктну схему від схеми даних - опишіть відображення між ними у метаданих)
- Зовнішні файли (наприклад, властивості або файли ресурсів)
- Збережені процедури
Які "плюси" та "мінуси" для кожного з них?
Чи слід вважати SQL-кодом «код» або «метадані»?
Чи слід використовувати збережені процедури лише для оптимізації продуктивності або вони є законною абстракцією структури бази даних?
Чи вирішальність є ключовим фактором рішення? А як щодо блокування постачальників ?
Що краще - нещільна муфта або герметична муфта і чому?
ВЕДЕНО: Дякую всім за відповіді - ось короткий опис:
Метадані, тобто реляційні відображення об'єктів (ORM)
Плюси:
- Дуже абстрактно - сервер БД можна перемикати без необхідності змінювати модель
- Широке поширення - практично стандарт
- Зменшує кількість необхідної SQL
- Може зберігати SQL у файлах ресурсів
- Продуктивність (як правило) прийнятна
- Підхід, керований метаданими
- (База даних) незалежність постачальника
Мінуси:
- Приховує SQL та справжні наміри розробників
- SQL важко переглядати / змінювати DBA
- SQL все ще може знадобитися для непарних випадків
- Може примусити використовувати власну мову запитів, наприклад, HQL
- Не піддається оптимізації (абстракції)
- Може бракувати референтної цілісності
- Замісники через відсутність знань SQL або відсутність обережності для кодування в БД
- Ніколи не порівнюйте продуктивність рідної бази даних (навіть якщо вона наближається)
- Код моделі дуже щільно поєднується з моделлю бази даних
Твердо кодований / інкапсульований у шарі DAO
Плюси:
- SQL зберігається в об'єктах, які отримують доступ до даних (інкапсуляція)
- SQL легко записати (швидкість розвитку)
- SQL легко відстежити, коли потрібні зміни
- Просте рішення (без брудної архітектури)
Мінуси:
- SQL неможливо переглянути / змінити DBA
- SQL, ймовірно, стане специфічним для БД
- SQL може стати важким для обслуговування
Збережені процедури
Плюси:
- SQL, що зберігається в базі даних (близько до даних)
- SQL аналізує, компілює та оптимізує СУБД
- SQL легко переглядати / змінювати DBA
- Зменшує мережевий трафік
- Підвищена безпека
Мінуси:
- SQL прив’язаний до бази даних (блокування постачальника)
- SQL-код важче підтримувати
Зовнішні файли (наприклад, властивості або файли ресурсів)
Плюси
- SQL можна змінити без необхідності перебудови програми
- Розв'язує логіку SQL від логіки бізнесу програми
- Центральний сховище всіх операторів SQL - простіше в обслуговуванні
- Легше зрозуміти
Мінуси:
- Код SQL може стати нездійсненним
- Важче перевірити SQL-код на наявність (синтаксису) помилок
Вбудований у пропозиції SQLJ
Плюси:
- Краща перевірка синтаксису
Мінуси:
- Занадто близько до Яви
- Нижча продуктивність, ніж JDBC
- Відсутність динамічних запитів
- Не така популярна