Дизайн класса абстракции базы данных с использованием PHP PDO

Я занимаюсь разработкой веб-приложения (действительно, это хобби, и я пытаюсь научить себя дизайну, и что может быть лучше, чем делать это :). Во всяком случае, я думал о том, как я буду иметь дело с моей базой данных. Мне нравится PDO , и я думал о том, чтобы использовать PDO в моем классе абстракции. Я думаю о создании синглета, так что есть только одно соединение с базой данных. Этот синглтон создаст соединение PDO.

После этого я не понимаю, почему мне нужно делать слишком много. Затем я могу использовать обработчик базы данных для вызова функций PDO. Мне могут понадобиться некоторые вспомогательные функции, но когда это сработает, я просто буду использовать PDO для реальных SQL-запросов.

Что-то не так с этим подходом? Это кажется слишком простым по сравнению с классами абстракции, которые я использовал.

Вам не нужен Синглтон.

База данных Singleton не решит проблемы параллелизма. Во всяком случае, он может убедиться, что у вас есть только один экземпляр PDO для запроса, в котором он был создан . И это обеспечивает глобальный доступ, который многие считают плохим. Кроме того, вы должны приложить дополнительные усилия при тестировании Singleton .

Просто создайте оболочку, которая лениво подключается и сохраняет экземпляр, когда это необходимо в вашем бутстрапе, и устанавливает экземпляр в ваш супертип DAL , например TableDataGateway . Кроме того, таким образом вы не ограничиваете себя только одним экземпляром PDO, если вам понадобится второй в какой-то момент.

Возможно, это кажется вам так просто, потому что PDO – это, по сути, класс абстракции базы данных. Это означает: работа уже выполнена.

Да, это хорошее начало. PDO + singleton является часто используемым и отличным сочетанием. Поскольку мне лично не нравится весь ввод текста, чем использование одиночных игр, я написал очень легкий класс базы данных .

Он вводит только две дополнительные функции в PDO: доступ к (ленивому) экземпляру PDO с использованием __callStatic ( DB::query() вместо DB::instance()->query() ) и двух функций для упрощения цитирования ( DB::q('INSERT INTO table (name) VALUES (?s)', $_POST['insecure_name']) ). Может быть, вы хотите посмотреть на оба, это очень удобно;)

Вы также можете быть заинтересованы в проекте php-pdo-wrapper-class . Это легкий класс базы данных, который расширяет PDO, добавляя несколько методов – вставлять, обновлять, удалять, выбирать (и несколько других) – для упрощения общих операторов SQL. Я использовал этот проект в своем развитии и очень рекомендую.