Проектирование классов для работы с БД в PHP Перерабатываю существующий проект, в нём достаточно много классов для работы с БД, однако же спроектированы они, как мне кажется, просто ужасно.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);
}

21 Авг 2019 в 07:09
173 +2
0
Ответы
1

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

Пример использования Dependency Injection:

class db {
// Класс для работы с БД
}
class db_ext {
// Класс с различными функциями
}
class db_module_N {
private $db;
public function __construct(db $db) {
$this->db = $db;
}
// Дополнительные методы для работы с модулем
}
// Использование классов
$db = new db();
$db_module_N1 = new db_module_N($db);
$db_module_N2 = new db_module_N($db);
$db_ext = new db_ext();

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

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 211 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир