Перерабатываю существующий проект, в нём достаточно много классов для работы с БД, однако же спроектированы они, как мне кажется, просто ужасно.
class db
— класс для работы с БД (подключение, обработка запросов/результатов, мониторинг соединения с БД)
class db_ext extends db
— класс содержащий множество разных функций, которые не вошли в другие классы.
class db_module_N extends db_ext
— классы модели, содержащие различные функции сопоставленные различным модулям системы
Я думаю, что наследоваться от класса (
db
), который предназначен для работы с БД — плохая практика. Соответственно, если мы перестаём от него наследоваться, то нужно отдельно создавать экземпляр данного класса и передавать его параметром во все классы, которые планируют работать с БД.
Пример:
$db_link = new db();
$db_module_N = new db_module_N($db_link);
$db_ext = new db_ext($db_link);
Такой код мне кажется слишком громоздким и не очень удобным. Возможно можно от этого как-то избавиться?
Делать класс
db
синглтоном не хочу, потому что иногда бывает нужно создавать несколько подключений к БД.
Так же некоторые классы наследуются иерархически и приходится постоянно писать
class db_module_N1 extends db_module_N
function __construct($db)
{
parent::__construct($db);
}