Суть DI заключается в том, чтобы освободить класс от создания и подготовки объектов, от которых он зависит, и подталкивания их. Это звучит очень разумно, но иногда классу не нужны все объекты, которые вставляются в него для выполнения его функции. Причиной этого является «ранний возврат», который происходит при некорректном вводе пользователя или исключении, вызванном одним из […]
Как я могу разрешать зависимости с контроллером, который можно тестировать? Как это работает: URI направляется на контроллер, контроллер может иметь зависимости для выполнения определенной задачи. <?php require 'vendor/autoload.php'; /* * Registry * Singleton * Tight coupling * Testable? */ $request = new Example\Http\Request(); Example\Dependency\Registry::getInstance()->set('request', $request); $controller = new Example\Controller\RegistryController(); $controller->indexAction(); /* * Service Locator * […]
Magento, IMHO, представляет собой систему PHP, которая построена на хорошо продуманных принципах кодирования – один из них – многоразовые шаблоны проектирования. Что касается примера системы PHP, я считаю, что ее можно считать довольно передовым и, следовательно, стоит рассматривать с архитектурной точки зрения. Насколько я понимаю, существует множество шаблонов проектирования, доступных разработчику ООП. Увидев, что такие […]
Существует ли консенсус относительно того, как плагины должны быть реализованы в приложении PHP? Я просмотрел шаблон наблюдателя, который близок, это просто система уведомлений и не позволяет коду расширять приложение напрямую. В настоящее время я использую простые системы крюков, с которыми я столкнулся: public function registerHook($hookName, array $params = array()) { $this->hooks[] = $hookName; foreach ( […]
Я готовлю разговор об общей архитектуре Zend Framework и хотел бы обобщить используемые в нем шаблоны проектирования. Я считаю, что это будет полезно как для тех, кто знает ZF и обучения DP , так и для тех, кто знает DP и изучает ZF . В первом случае можно было бы увидеть реальное применение шаблонов и […]
Я относительно новичок в разработке шаблонов, но я чувствую, что у меня есть хорошее представление о шаблоне MVC и преимуществах, которые дает это разделение кода. Тем не менее, оба раза я видел шаблон MVC в действии (Magento и Joomla!), Есть дополнительная специализация, с представлением, состоящим как из класса представления (блок Magento), так и файла шаблона […]
Я видел много людей, говорящих, что Symfony2, Zend Framework 2 и другие управляются событиями. В настольном мире, при программировании, основанном на событиях, я понимаю, что приложение будет уведомлять своих наблюдателей всякий раз, когда изменяется его состояние. Поскольку PHP-приложения не имеют отношения к штату, нет никакого способа сделать такую вещь. IE. Наблюдатели привязаны к просмотру, наблюдая […]
Я работаю над личным проектом HMVC: Нет локаторов сервисов, глобального состояния (например, static или global ), нет синглтонов. Обработка модели инкапсулируется в сервисах (service = domain objects + repositories + data mappers). Все контроллеры расширяют абстрактный контроллер. Все зависимости проекта вводятся через контейнер инъекций зависимостей Auryn . Все необходимые зависимости вводятся в конструктор абстрактного контроллера. […]
Я видел много раз Zend Framework, используя return $this; стиль рисунка – и с моей точки зрения: Pro: кажется, это довольно неплохой стиль шаблона для объединения многих действий на одном и том же объекте и сокращения вашего кода. Con: код выглядит немного странным, когда вы видите, что объект возвращает себя в методе, что делает что-то […]
Если вы ищете причины, почему статические методы являются плохими, первое, что вы обнаружите, это потому, что вы не можете переопределить его, когда вы тестируете устройство. Так это все еще верно, учитывая, что в PHP 5.3 вы можете делать все, что хотите, с введением static:: ? Добавить: http://sebastian-bergmann.de/archives/883-Stubbing-and-Mocking-Static-Methods.html Обратите внимание, что он объясняет, как использовать синглтон […]