【问题标题】:How to implement service layer in Zend Framework? [closed]Zend Framework中如何实现服务层? [关闭]
【发布时间】:2010-03-16 21:13:48
【问题描述】:

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

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

【问题讨论】:

  • 很遗憾..帖子的链接现在已经失效了。
  • @AmitDugar 你应该点击“Bookie Link”(而不是“这是个有趣的帖子”)

标签: php zend-framework


【解决方案1】:

我认为这个问题的答案取决于您的需求、您的时间限制以及您对软件开发的总体方法/风格。

我最近 (A) 决定在一个小而复杂的 Web 应用程序上使用 Zend Framework,该应用程序的截止日期非常紧迫,并且 (B) 我花了很多时间研究 ORM 解决方案和不同的 ZF 应用程序结构。我得出的结论是,没有一种万能的解决方案,您应该随意发挥创意并构建一个满意的应用程序结构。 p>

如果您有时间限制并且应用程序不是太大,那么您可以创建名称为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+ 吗?)

【讨论】:

    【解决方案2】:

    您无需破解即可获得服务层工作。默认自动加载器有一个资源命名空间 Service_,其中包含应用程序内的 services 文件夹。所以,它会从 application\services 加载服务层,类应该遵循 Service_* 命名模式。

    【讨论】:

      【解决方案3】:

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

      例如,您可能想看看:

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

      (嗯,我希望这就是你所说的服务,实际上)

      【讨论】:

      • 是的,我知道 ZFPlanet。这是一个非常好的例子,值得学习。帕迪仍在努力。它还没有完成,但已经开始工作了。服务是指模型和控制器之间的东西。现在我在模型中放了很多代码,并且还使用了一些自定义类,我认为这些类可能称为服务。有许多类型的模型。但实际上模型和服务有什么区别?
      • @takeshin 看这里martinfowler.com/eaaCatalog/serviceLayer.html - 圆圈内的一切都是模型。
      • 谢谢,已经去过了。将福勒的书籍列入“必读”清单。
      猜你喜欢
      • 2020-10-25
      • 2012-03-29
      • 2010-11-18
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多