Рассмотрим модуль взаимодействия с базой данных, написанный на PHP, содержащий классы для взаимодействия с базой данных. Я не начал кодировать класс, поэтому я не буду давать фрагменты кода.
В таблице базы данных будет указан один класс, как описано ниже.
Пользователь. Класс для взаимодействия с пользовательской таблицей. Класс содержит такие функции, как createUser, updateUser и т.д.
Местоположение. Класс для взаимодействия с таблицей местоположений. Класс содержит такие функции, как searchLocation, createLocation, updateLocation и т.д.
Кроме того, я думаю о создании другого класса следующим образом: -
DatabaseHelper: класс, который будет иметь член, который представляет соединение с базой данных. Этот класс будет содержать методы нижнего уровня для выполнения SQL-запросов, таких как executeQuery (запрос, параметры), executeUpdate (запрос, параметры) и т.д.
На этом этапе у меня есть два варианта использования класса DatabaseHelper в других классах: -
- Класс User and Locations расширяет класс DatabaseHelper, чтобы они могли использовать унаследованные методы executeQuery и executeUpdate в DatabaseHelper. В этом случае DatabaseHelper гарантирует, что в любой момент времени будет только один экземпляр подключения к базе данных.
- Класс DatabaseHelper будет введен в класс User and Locations через класс Container, который будет создавать экземпляры пользователя и местоположения. В этом случае контейнер будет проверять наличие только одного экземпляра DatabaseHelper в приложении в любой момент времени.
Это два подхода, которые быстро приходят мне в голову. Я хочу знать, с каким подходом идти. Возможно, оба этих подхода недостаточно хороши, и в этом случае я хочу знать любой другой подход, который я могу использовать для реализации модуля взаимодействия с базой данных.
Edit:
Обратите внимание, что класс Container будет содержать статический член типа DatabaseHelper. Он будет содержать частную статическую функцию getDatabaseHelper(), которая вернет существующий экземпляр DatabaseHelper или создаст новый экземпляр DatabaseHelper, если он не существует, и в этом случае он заполнит объект соединения в DatabaseHelper. Контейнер также будет содержать статические методы, называемые makeUser и makeLocation, которые будут вводить DatabaseHelper в User и Locations соответственно.
Прочитав несколько ответов, я понимаю, что на начальный вопрос почти был дан ответ. Но все же есть сомнения, что нужно уточнить, прежде чем я смогу принять окончательный ответ, который заключается в следующем.
Что делать, когда у меня есть несколько баз данных для подключения, а не одна база данных. Как класс DatabaseHelper включает это и как контейнер вставляет соответствующие зависимости базы данных в объекты User и Location?