0

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

无需输入太多细节,此应用程序将有多个服务,例如,将连接到外部 API,甚至在多个数据库中,工作流程也非常复杂,单个操作可以根据多个外部信息有多个流程(至于用户登录,配置等)。

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

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

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

4

1 回答 1

2

为什么要使用单例?

您无需担心服务管理器中的服务过多,因为它们仅在您从服务管理器获取时才会启动。

也不要在工厂以外的另一个类中使用服务管理器。在 ZF3 中,它从控制器中移除是有原因的。其中之一是可测试性。如果所有服务都注入工厂,您可以轻松编写测试。此外,如果您明年阅读您的代码,您可以轻松查看类中需要哪些依赖项。

如果您发现在一个类中注入了太多并不总是需要的服务,您可以:

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

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

于 2016-09-20T05:49:19.670 回答