Подтвердить что ты не робот

Как реализовать сервисный уровень в Zend Framework?

Я ищу некоторые полезные ресурсы, чтобы узнать, как реализовать внутренний уровень обслуживания в Zend Framework. Это интересный пост Bookie Link, но без конкретного кода образцы.

  • Где поставить классы обслуживания (/application/modules/modulename/services/?);
  • Как выполнить автозагрузку (пользовательский автозагрузчик?)
  • Наиболее распространенные службы (пользователь, аутентификация, корзина, кеш, фид?)
  • Примеры реализации (любые репозитории github?)
  • Хорошая практика?
4b9b3361

Ответ 1

Я думаю, что ответ на этот вопрос зависит от ваших потребностей, временных ограничений и общего подхода к разработке стиля программного обеспечения.

Недавно я (A) принял решение использовать Zend Framework на небольшом, но сложном веб-приложении, которое имеет очень сжатый срок, и (B) потратили много времени на исследования решений ORM и различных структур приложений ZF в целом. Вывод, к которому я пришел, заключается в том, что нет единого решения для всех, и вы должны быть свободны, чтобы получить творческий подход и создать структуру приложения, которой вы довольны.

Если у вас ограниченные временные ограничения и приложение не слишком велико, вы можете просто создавать классы с именами типа Application_Model_BlahService и хранить их в каталоге application/models, и они будут загружаться по умолчанию автозагрузчиком (при условии, что автозагрузчик был загружен правильно).

Но если ваше приложение больше или если по какой-либо другой причине вы хотите разделить классы на другие каталоги, вы можете создать свои собственные подкаталоги в каталоге приложения и использовать что-то вроде кода ниже (который будет существовать в application/Bootstrap.php), чтобы добавить эти классы в автозагрузчик:

protected function _initResourceLoader()
{
    $this->_resourceLoader->addResourceType( 'service', 'services', 'Service' );
    $this->_resourceLoader->addResourceType( 'serviceplugin', 'services/plugins', 'Service_Plugin' );
}

Затем вы можете создавать классы типа Application_Service_Invoice, которые будут находиться в application/services/Invoice.php и Application_Service_Plugin_TaxPlugin, которые будут находиться в application/services/plugins/TaxPlugin.php. (Примечание: в приведенном выше коде предполагается, что вы используете Zend_Application).

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

Последняя вещь: посмотрите Zend_Application_Module_Autoloader список ресурсов, которые по умолчанию добавлены в автозагрузчик. (Должен ли я упомянуть, что я имею в виду ZF 1.8+ в этом ответе?)

Ответ 2

Вам не нужно взломать, чтобы получить уровень обслуживания. Автозагрузчик по умолчанию имеет пространство имен ресурсов Service_ с папкой служб внутри приложения. Таким образом, он загрузит сервисный уровень из приложения \services, классы должны следовать шаблону именования Service_ *.

Ответ 3

В принципе, вы могли бы поместить их в любом месте; где-то рядом с моделью, скорее всего, будет смысл.

В качестве примера вы можете взглянуть на:

  • ZFPlanet: пример планеты, разработанной с ZF
    • Не уверен, что это закончено, но есть несколько классов, контроллеров, моделей, конфигурационных файлов,...
    • Это означает, что выполнение кода может помочь (для меня это для некоторых вещей)
  • И, особенно, его каталог application/modules/zfplanet/models/Service
    • Что содержит два класса.

(Ну, я надеюсь, что на самом деле вы имели в виду сервис)