如何在Zend Framework中实现服务层?

时间:2010-03-16 21:13:49

标签: php zend-framework

我正在寻找一些很好的资源来学习如何在Zend Framework中实现内部服务层。 This is interesting post Bookie Link,但没有具体的代码示例。

  • 在何处放置服务类(/application/modules/modulename/services/?);
  • 如何自动加载它们(自定义自动加载器?)
  • 最常见的服务(用户,身份验证,购物车,缓存,Feed?)
  • 示例实现(任何github repos?)
  • 良好做法?

3 个答案:

答案 0 :(得分:22)

我认为这个问题的答案取决于您的需求,时间限制以及您对软件开发的整体方式。

我最近(A)决定在一个小而复杂的Web应用程序上使用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.phpApplication_Service_Plugin_TaxPlugin中,这些类将驻留在application/services/plugins/TaxPlugin.php中。 (注意:上面的代码假设您使用的是Zend_Application)。

理论上,你可以根据自己的喜好选择这个,并将模型类与服务类从数据访问类等分开等等。但同样,它还取决于你喜欢的开发风格,大小等等。团队,以及在某种程度上,你的持久层对你施加的要求。

最后一件事:在Zend_Application_Module_Autoloader中查看默认情况下添加到自动加载器的资源列表。 (在这个答案中,我是否应该提到我指的是ZF 1.8+?)

答案 1 :(得分:13)

您不需要黑客来获取服务层工作。默认自动加载器在应用程序中有一个资源名称空间Service_with services文件夹。因此,它将从application \ services加载服务层,类应遵循Service_ *命名模式。

答案 2 :(得分:2)

基本上,你可以将它们放在任何你喜欢的地方;但是,靠近模型的某个地方很可能会有意义。

例如,您可能需要查看:

  • ZFPlanet:用ZF开发的行星的一个例子
    • 不确定它已经完成,但有几个类,控制器,模型,配置文件,......
    • 这意味着通过代码可以帮助(对于我来说,它有一些东西)
  • 特别是它的application/modules/zfplanet/models/Service目录
    • 其中包含两个类。

(嗯,我希望你的服务实际上是那种意思)