Lightning
Трудоголик
Слой взаимодействия с БД
Знаю, что тема неоднократно обсуждалась, но это обычно было в форме холиваров. Хотелось бы обсудить эти вопросы более развернуто и спокойно, изложить свои мысли и послушать умных людей, собрать все аргументы в этот топик.
Моя попытка проанализировать типичные решения, используемые для организации слоя взаимодействия с БД:
1. Использование шаблонов SQL-запросов.
Плюсы:
- "Прозрачность".
Минусы:
- Слабая гибкость (Одно изменение в проекте может потребовать затронуть множество шаблонов запросов)
- Слабая портируемость (При переходе на другую СУБД необходимо переписывать весь слой взаимодействия с БД).
2. Конструкторы SQL-запросов.
Плюсы:
- Гибкость.
- Портируемость.
Минусы:
- "Непрозрачность" (Возможны трудности с поиском мест, где какой-либо запрос собирается).
3. ОРМ.
Плюсы:
- Снижение сложности (Т.к. ОРМ предоставляет более высокий уровень абстракции).
- Увелечение скорости разработки.
- Гибкость.
- Портируемость.
Минусы:
- Полнейшая "непрозрачность" и, как следствие, сложности с отладкой и оптимизацией запросов.
4. Хранимые процедуры БД.
Плюсы:
- "Прозрачность".
- Гибкость.
- Полное отделение логики работы с БД.
Минусы:
- Сложности рефакторинга, тестирования и контроля версий.
- Слабая портируемость.
Вопросы:
1. Какие из перечисленных решений Вы используете и почему?
2. Какие еще плюсы или минусы существуют у перечисленных в посте решений?
3. Существуют ли еще какие-либо решения организации слоя взаимодействия с БД?
P.S. Я обычно использую нечто похожее на самописный конструктор SQL запросов.
Знаю, что тема неоднократно обсуждалась, но это обычно было в форме холиваров. Хотелось бы обсудить эти вопросы более развернуто и спокойно, изложить свои мысли и послушать умных людей, собрать все аргументы в этот топик.
Моя попытка проанализировать типичные решения, используемые для организации слоя взаимодействия с БД:
1. Использование шаблонов SQL-запросов.
Плюсы:
- "Прозрачность".
Минусы:
- Слабая гибкость (Одно изменение в проекте может потребовать затронуть множество шаблонов запросов)
- Слабая портируемость (При переходе на другую СУБД необходимо переписывать весь слой взаимодействия с БД).
2. Конструкторы SQL-запросов.
Плюсы:
- Гибкость.
- Портируемость.
Минусы:
- "Непрозрачность" (Возможны трудности с поиском мест, где какой-либо запрос собирается).
3. ОРМ.
Плюсы:
- Снижение сложности (Т.к. ОРМ предоставляет более высокий уровень абстракции).
- Увелечение скорости разработки.
- Гибкость.
- Портируемость.
Минусы:
- Полнейшая "непрозрачность" и, как следствие, сложности с отладкой и оптимизацией запросов.
4. Хранимые процедуры БД.
Плюсы:
- "Прозрачность".
- Гибкость.
- Полное отделение логики работы с БД.
Минусы:
- Сложности рефакторинга, тестирования и контроля версий.
- Слабая портируемость.
Вопросы:
1. Какие из перечисленных решений Вы используете и почему?
2. Какие еще плюсы или минусы существуют у перечисленных в посте решений?
3. Существуют ли еще какие-либо решения организации слоя взаимодействия с БД?
P.S. Я обычно использую нечто похожее на самописный конструктор SQL запросов.
