Объект базы данных для каждого класса или всего сайта? - PullRequest
1 голос
/ 17 июля 2009

У меня есть класс базы данных, который сконструирован так, что он открывает соединение с базой данных при запуске первого запроса. Должен ли каждый из других классов, используемых для пользователей сайта, групп и т. Д., Создавать каждый объект базы данных? Это облегчает развертывание классов в другом месте; они будут зависеть только от класса базы данных. Это, однако, потребует от меня ввода учетных данных в каждом классе. Другой подход, который кажется мне менее запутанным, - создать объект базы данных и сохранить его в глобальной переменной. Это сокращает количество активных соединений с базой данных и упрощает настройку; учетные данные должны быть установлены только один раз.

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

Ответы [ 4 ]

1 голос
/ 17 июля 2009

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

Другой распространенный способ - использование синглетонов для соединений с базой данных. По сути, это все еще глобальная переменная, но это означает, что вы можете управлять созданием объекта базы данных в одном месте.

0 голосов
/ 17 июля 2009

Я бы создал «конфигурационный» файл, который бы просто сохранял учетные данные в виде переменных и включал их в требуемые файлы классов.

Таким образом, любые изменения учетных данных требуют только изменения файла конфигурации.

EDIT:

Я забыл упомянуть, что это означает, что новый экземпляр вашего класса базы данных должен создаваться в каждом классе.

0 голосов
/ 17 июля 2009

Вам следует избегать глобальных объектов базы данных. Ваша база данных должна быть открыта как можно позже и закрыта как можно раньше.

Вы должны использовать объект базы данных для каждого класса, и он должен открываться / закрываться только при необходимости.

0 голосов
/ 17 июля 2009

Я бы создал базовый класс, который содержит только элементы управления соединением и ничего не зависит от таблицы. Затем вы можете поместить учетные данные там.

Другой вариант - использовать статическую переменную в таком базовом классе для хранения учетных данных (вместо жесткого кодирования их в функции, которая выглядит немного грязно).

Так что BaseDBConnection::$username и BaseDBConnection::$password будут содержать учетные данные, а ваши другие классы DBConnection являются производными от BaseDBConnection и ссылаются на self::$username и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...