IoC в PHP, как ему лучше объяснить, какой объект инициализировать?

Есть некий мини велосипедный Inversion of Control объект. То-есть когда он создается классы вот таким вот образом
IoC->Create('Model_Test');
То автоматом инициализируется все зависимые классы.
IoC->Create('Model_Test'); = new Model_Test(new DB, new Model_Test3);

Правда их инициализирует сам класс(точнее методы реализованы в базовом классе), таким образом это больше Service Locator конечно или даже Class Factory но не в этом суть. Вопрос вот в чем

Исходя из правильности подхода какие классы должны быть инициализированные определяются на основе ранее привязанных к ним интерфейсов. То-есть если в конструкторе идет IBaseDB интерфейс и мы привязали его ранее к классу BaseDB то при инициализации понятно что нужно его пихать.

Беда в следующем, если у нас есть 2 подключения к базе одновременно. То-есть этот интерфейс IBaseDB реализует одновременно 2 класса. Тогда перед самым вызовом нужно связывать этот интерфейс с другим классом, создавать класс а потом связывать обратно или возможно есть лучший путь?

Есть еще вариант сделать еще 1 интерфейс с другим именем и тогда при инициализации класса не нужно будет делать дополнительные связи. Но такой подход кажется неправильный так как придется делать полный дубль первого интерфейса со всеми его методами.
  • Вопрос задан
  • 2605 просмотров
Решения вопроса 1
Есть еще вариант сделать еще 1 интерфейс с другим именем и тогда при инициализации класса не нужно будет делать дополнительные связи. Но такой подход кажется неправильный так как придется делать полный дубль первого интерфейса со всеми его методами.

//Допустим есть базовый интерфейс:
interface IBaseDB{
    // здесь список методов
}
//Просто наследуем 2 пустых интерфейса от него:
interface IBaseDBLogDB extends IBaseDB{}
interface IBaseDBMasterDB extends IBaseDB{}
//и Забиваем их в IoC:
$IoC->Bind('IBaseDBLogDB',$log_db_connection_instance);
$IoC->Bind('IBaseDBMasterDB',$master_db_connection_instance);

Не вижу здесь дублирования кода, на мой взгляд вполне жизнеспособное решение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект