Zend Framework 3单身人士

时间:2016-09-19 19:10:56

标签: singleton zend-framework3

我正在Zend Framework 3中创建一个新应用程序,我对设计模式有疑问

如果没有输入太多细节,这个应用程序将有多个服务,就像在,将连接到外部API,甚至在多个数据库中,工作流也非常复杂,单个动作可以有多个流,具体取决于几个外部信息(用户登录,配置等)。

我知道依赖注入和Zend Framework 3 Service Manager,但是我担心在某些情况下当流程实际上只使用其中的一部分时会实现sereval服务,我们也会根据其他服务提供服务,这个,我在考虑使用单身人士。

单身真的是解决方案吗?我正在寻找一种在Zend Framework 3中使用单例的方法,并且没有找到一种简单的方法,因为我找不到在服务中使用Service Manager的方法,因为我无法检索服务管理器的实例在工厂系统之外。

在Zend Framework 3中实现单例的简单方法是什么?

1 个答案:

答案 0 :(得分:2)

为什么要使用单身人士?

您不必担心服务管理器中的服务太多,因为只有当您从服务管理器获取服务时才会启动它们。

除了工厂外,不要在另一个类中使用服务管理器。在ZF3中,出于某种原因将其从控制器中移除。其中之一是可测试性。如果所有服务都注入工厂,您可以轻松编写测试。另外,如果你明年阅读你的代码,你可以很容易地看到一个类中需要什么依赖。

如果您发现在课程中注入的服务太多而且并不总是需要,您可以:

  • 使用ProxyManager。这种延迟加载服务但在调用方法之前不会启动它。
  • 拆分服务:将某些部件从服务移动到新服务中。例如您不需要将所有内容放在UserService中。您还可以拥有UserRegisterService,UserEmailService,UserAuthService和UserNotificationsService。

除了ZF3,您还可以考虑zend-expressive。没有太多细节,它是一个轻量级的中间件框架。您可以使用中间件来检测请求所需的内容,并路由到处理请求所需的操作。这样的事情也可能在ZF3中完成,但也许其他人可以解释如何在那里做。