Я создал внутреннюю структуру MVC PHP, и теперь я изо всех сил пытаюсь внедрить контейнер DI. Я принял Pimple в качестве DiC, я прочитал книгу Криса Хартьеса "The Grumpy Programmer's Guide To Создание тестируемых PHP-приложений" (очень хорошее и вдохновляющее чтение, очень рекомендую!), благодаря которым я больше понял о TDD. В любом случае, если я получу DI в ядре фреймворка, как мне заполнить определения и как мне его передать.
- Внедрение контейнера (внедрение в объект приложения вплоть до созданного пользователем контроллера). - НЕПРАВИЛЬНО
- Заставлять пользователя-разработчика «заполнять» его в Bootstrap — НЕПРАВИЛЬНО
- Синглтон – ОЧЕНЬ НЕПРАВИЛЬНО
- Шаблон наблюдателя (DiC прикреплен к наблюдателю. Наблюдатель как внешний интерфейс к DiC) - ?(Вероятно, худшая идея: D)
Затем, как сделать ядро DiC доступным во всей структуре (скажем, для внедрения объекта конфигурации), без создания каких-либо зависимостей, ненужного принуждения пользователя к его кодированию или добавления накладных расходов на создание XML/JSON или любого другого.
PS: ** Я верю, что увижу много ответов о Inversion-of-Control (IoC) и Service Locator. Что я не могу понять, как именно их реализовать. Ссылайтесь на простое/базовое руководство.
$myFactory = new FooFactory( new DIContainer );
. Я надеюсь, что когда вы слышите factory, у вас не возникает ассоциации со статическим методом factory, потому что последний ИМХО - довольно плохая практика. - person tereško   schedule 19.10.2013