Где должно поддерживаться JDBC-приложение для хранения SQL-запросов и почему?
До сих пор мне удалось определить эти параметры:
- Жесткий код в бизнес-объектах
- Вложенные в SQLJ статьи
- Инкапсулировать в отдельных классах, например. Объекты доступа к данным
- Управляемые метаданные (отделить объект схема из схемы данных - описывают отображения между ними в метаданные)
- Внешние файлы (например, Свойства или Файлы ресурсов)
- Сохраненные процедуры
Каковы "плюсы" и "минусы" для каждого из них?
Должен ли SQL-код рассматриваться как "код" или "метаданные"?
Должны ли хранимые процедуры использоваться только для оптимизации производительности или они являются законной абстракцией структуры базы данных?
Является ли производительность ключевым фактором решения? Как насчет блокировка поставщика?
Что лучше - свободная муфта или плотная муфта и почему?
EDITED: Спасибо всем за ответы - вот резюме:
Работа с метаданными, то есть объектные реляционные сопоставления (ORM)
Плюсы:
- Очень абстрактно - сервер БД может быть переключается без необходимости изменения модель
- Широко распространенный - практически стандартный
- Сокращает объем необходимых SQL
- Может хранить SQL в файлах ресурсов
- Производительность (обычно) приемлема
- Подход, основанный на метаданных
- (База данных) Независимость поставщика
Минусы:
- Скрывает SQL и настоящих разработчиков Намерения
- SQL трудно пересмотреть/изменить от DBA
- SQL может потребоваться для нечетного случаи
- Может принудительно использовать запатентованный язык запросов, например. HQL
- Не поддается оптимизации (Абстракция)
- Не хватает ссылочной целостности
- Замены из-за отсутствия знаний SQL или отсутствие заботы о кодировании в БД
- Никогда не сопоставлять собственную базу данных производительность (даже если она приближается)
- Код модели очень плотно связан с модель базы данных
Жестко закодированный/инкапсулированный в слое DAO
Плюсы:
- SQL хранится в объектах, которые данные доступа (инкапсуляция)
- SQL легко писать (скорость развитие)
- SQL легко отслеживать, когда необходимы изменения
- Простое решение (без проблем) архитектура)
Минусы:
- SQL не может быть просмотрен/изменен администратором базы данных
- SQL, скорее всего, станет специфичным для БД
- SQL может стать трудно поддерживать
Сохраненные процедуры
Плюсы:
- SQL хранится в базе данных (рядом с данные)
- SQL анализируется, компилируется и оптимизируется по СУБД
- SQL для администратора баз данных легко просматривать/изменять
- Снижает сетевой трафик.
- Повышенная безопасность
Минусы:
- SQL привязан к базе данных (поставщик блокировка в)
- SQL-код сложнее поддерживать
Внешние файлы (например, Свойства или файлы ресурсов)
Доводы
- SQL может быть изменен без необходимости перестроить приложение.
- Отделяет логику SQL от бизнес-логика приложений
- Центральный репозиторий всех SQL заявления - легче поддерживать
- Легче понять
Минусы:
- Код SQL может стать не поддерживаемым
- Сложнее проверить код SQL для (синтаксис).
Вложенные в предложения SQLJ
Плюсы:
- Лучшая проверка синтаксиса
Минусы:
- Слишком близко к Java
- Более низкая производительность, чем JDBC
- Отсутствие динамических запросов
- Не так популярны