Задать вопрос

Имеет ли смысл писать свою обертку над PDO?

Собственно сабж. Один знакомый преподаватель задал своим студентам лабу — написать класс-обертку над PDO, чтобы, якобы, изменением одного параметра изменять тип БД, с которой работает сайт. Возник вопрос, насколько это актуальная задача на практике и стоит ли таким заморачиваться?
  • Вопрос задан
  • 5248 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
AlexeyParhomenko
@AlexeyParhomenko
На практике — вы все равно столкнетесь со специфичными свойствами одной или другой бд, которые вам захочется / нужно будет применить. Каждый производитель бд все равно вносит какие-то различия в SQL синтаксис, иначе зачем клон существующего проекта? — Так что преследовать цель кросс-бд по моему субъективному мнению весьма утопично. Более разумным будет ознакомится со спецификой конкретной бд и понять для чего она, а не городить универсальных рюшек. Чем более универсальный инструмент тем сложнее его реализация и дальнейшая поддержка.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 10
@nick4fake
В большинстве случаев, нет. Есть doctrine и куча других готовых библиотек.
Ответ написан
Комментировать
Inori
@Inori
Нет, лучше проведите время за изучением того, как это реализовано у крутых дядек (Doctrine, Propel).
Ответ написан
Комментировать
startsevdenis
@startsevdenis
В некоторой коммерческой CMS с которой я работаю, реализована обертка над PDO, в зависимости от настроек сайта, можно не меняя запросов работать с различными БД (oracle, mssql, mysql). Так что видимо задача актуальна.
Ответ написан
только если планируется использовать несколько соединений с БД или разными типами БД
Ответ написан
Комментировать
@egorinsk
PDO из коробки малоюзабелен и неудобен: не считает время и статистику запросов, не поддерживает ленивого соедиения, пула соединений, транзакций, нормальных плейсхолдеров. потому обертку писать стоит в 90% случаев.

А вот написать обертку, позволяющую прозрачно для кода менять СУБД, у вас не получится. В MySQL есть LIMIT, INSERT ON DUPLIATE KEY UPDATE и куча вещей, которых нет в других БД. Что вы с ними делать будете, чтобы заставить работать в оракле?
Ответ написан
DrNemo
@DrNemo
в своих проектах использую самописный конструктор запросов.
удобно для ускорения разработки и в случае миграции на другую бд.
В основе pdo
Ответ написан
Комментировать
AGvin
@AGvin
Все зависит от масштабов проекта. При таком варианте переключений между типами БД, у Вас будут сложности с оптимизацией вытяжки/изменении данных.
Ответ написан
KonstRuctor
@KonstRuctor
программист, дизайнер, фотограф, журналист
Недавно смотрел серию видеоуроков, в которых такой функционал был реализован в качестве обучения основам ООП. Видимо, преподаватель тоже не прочь посмотреть уроки.
Ответ написан
Комментировать
AmdY
@AmdY
PHP и прочие вебштучки
Не совсем понятна задача, PDO без всяких обёрток из коробки является DBAL. А вот обёртки учиться писать стоит, особенно с итерациями по увеличению функциональности, чтобы заранее продумывали точки входа и расширения. У меня такая обёртка обязательная при обучении джуниоров, профит огромный.

По поводу PDO и поддержки разных баз данных, то эта идея из коробки не работает, т.к. можно писать кастомный SQL, который может не поддерживаться всеми БД, поэтому нужен как минимум Query Builder.
Ответ написан
Комментировать
Wott
@Wott
на этом уровне это исключительно школьная задача и практической ценности у нее нет — стоит только копнуть чуть глубже простого селекта и выясняется что движки сильно отличаются и банальное id последней вставки может вызвать головную боль при портировании.

абстрагироваться надо выше — на уровне обьектов и операций работы с ними. собственно оптимизация делается уже под движек и может вызвать изменения на уровне порядка, вида запросов или отдельных операций. Тут обойтись оберткой над вызовами к базе не обойтись.

А вообще задачи доступа к разным движкам достаточно характерны для интеграции ( срастить документы в разных системах оборота, сопрячь VCS, треккер, тест менеджер и системы бизнес процессов ), для разного рода разделения по уровням ( sq-nosql, внешняя и локальная, серверная и клиентская )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы