我正在 Zend Framework 3 中创建一个新应用程序,我有一个关于设计模式的问题
无需输入太多细节,该应用程序将有多个服务,例如,将连接到外部 API,甚至在多个数据库中,工作流程也非常复杂,单个意志操作可以根据多个外部信息(其中用户登录、配置等)。
我了解依赖注入和 Zend Framework 3 服务管理器,但是我担心在某些情况下流程实际上只使用其中的几个服务时实例化多个服务,而且我们也会有依赖于其他服务的服务,为此,我正在考虑使用单例。
单例真的是一个解决方案吗?我正在寻找一种在 Zend Framework 3 中使用单例的方法,但还没有找到一种简单的方法,因为我找不到在服务中使用服务管理器的方法,因为我无法检索服务管理器的实例在工厂系统之外。
在 Zend Framework 3 中实现单例的简单方法是什么?
为什么使用单例?
您无需担心服务管理器中的服务过多,因为它们仅在您从服务管理器获取服务时才会启动。
也不要在除工厂之外的其他类中使用服务管理器。在 ZF3 中,它被从控制器中删除是有原因的。其中之一是可测试性。如果所有服务都通过工厂注入,您可以轻松编写测试。另外,如果您明年阅读代码,您可以轻松了解类内需要哪些依赖项。
如果您发现类中注入了太多并不总是需要的服务,您可以:
除了 ZF3,你还可以考虑 zend-expressive。无需过多讨论,它是一个轻量级中间件框架。您可以使用中间件来检测请求所需的内容,并路由到处理请求所需的操作。像这样的事情可能也可以在 ZF3 中完成,但也许其他人可以解释如何在那里做到这一点。