Zend Framework 3 单例

Zend Framework 3 singletons

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

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

我知道依赖注入和 Zend Framework 3 服务管理器,但是我担心在某些情况下流程实际上只使用其中的几个服务时实例化服务,我们也会有依赖于其他服务的服务,为此,我正在考虑使用单例。

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

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

为什么要使用单例?

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

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

中需要哪些依赖项

如果您发现 class 中注入了太多并非总是需要的服务,您可以:

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

代替ZF3,也可以考虑zend-expressive。无需过多赘述,它是一个轻量级的中间件框架。您可以使用中间件来检测请求需要什么,并路由到处理请求所需的操作。像这样的事情可能也可以在 ZF3 中完成,但也许其他人可以在那里解释如何做。