2010-07-17 2 views
3

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

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

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

+2

Абстракция базы - смешной миф. ORM - это еще одна история, не менее злая, но, по крайней мере, настоящая. –

+0

Вам не нужен Singleton – Gordon

+0

@ Gordon, не могли бы вы объяснить, почему мне не нужен синглтон? Я всегда слышал, что вам нужен синглтон, чтобы убедиться, что нет одновременной записи и тому подобного. – Tim

ответ

5

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

База данных Singleton не решит проблемы параллелизма. Во всяком случае, он может убедиться, что у вас есть только один экземпляр PDO для запроса, который был создан в. И это обеспечивает глобальный доступ, который многие считают плохим. Кроме того, you have to make some extra effort when testing the Singleton.

Просто create a wrapper that lazy connects and stores the instance, когда это необходимо в вашем файле загрузки и установить экземпляр вашей DALsupertype, например TableDataGateway. Кроме того, таким образом вы не ограничиваете себя только одним экземпляром PDO, если вам понадобится второй в какой-то момент.

3

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

+0

Верно, вот почему я задаю этот вопрос. Там так много классов абстракции базы данных и whizbangs, просто казалось, что я чего-то не хватает ...Рад узнать, что я не совсем от рокера. – Tim

1

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

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

1

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

Смежные вопросы