我对ManagerService类名后缀感到有些困惑。

据我了解的区别,Managers负责处理(创建,检索,删除等)某些类型的实体。例如,ModuleManager负责加载和返回Modules。在这种情况下,您会关心实际的实体Module

但是,Services是提供接口(interface)以执行某些类型的过程逻辑的类。例如,LogService将给定的日志消息发送到已定义的日志编写器。您不在乎它的去向和作用,您只想让管理员知道发生了什么。

现在,ZF2提供了一个ServiceManager,它创建并返回给定Service的实例。我不小心习惯了创建Managers并向factory提供ServiceManager,以便您可以在Manager上下文中使用$this->getServiceLocator()->get('managerName');访问Controller,以使 Controller 更小,并使可测试类中的真实逻辑保持不变。这部分现在使我感到困惑,因为显然,不建议使用Managers检索ServiceLocator但不是唯一一个这样做的人:Doctrine ORM模块是该示例的另一个示例:默认情况下,它将EntityManager注册为doctrine.entitymanager.orm_default Service

我得到的ServicesManagers之间的真正区别是错误的吗?有什么区别吗?在这个概念中Managers甚至可以从Services继承吗?

最佳答案

我将尝试为您分解ZF2中的管理器和服务。

管理人员

不幸的是,“manager”一词在类中的含义令人难以置信,并且在ZF2中,其用法有些不一致。因此,对于ZF2中的“经理”一词,确实没有权威的定义。目前,最好将ZF2中的“经理”分解如下:

  • ServiceManager Zend\ServiceManager\ServiceManager的实例。可以有多个ServiceManager实例-默认情况下,只有“主”服务管理器,它使用'services'配置键或由Module的getServiceConfig()方法返回的数组进行配置。
  • 插件管理器 —这些扩展了Zend\ServiceManager\PluginManager,从而扩展了Zend\ServiceManager\ServiceManager并具有某些特殊功能。它们分布在框架中的许多组件中,并提供了以前称为(在ZF2的早期版本中)称为插件加载程序/代理的功能。这些插件管理器可以初始化view helperscontroller pluginscontrollers themselves之类的东西。
  • 其他“管理者” —诸如Zend\ModuleManager\ModuleManagerZend\Session\SessionManager之类的东西。这些与ServiceManager无关,只是碰巧以'Manager'作为其名称的后缀。

  • 我认为您可能会感到困惑,因为试图将定义分配给未考虑任何特定定义的术语(经理)。作为Zend\ModuleManager的作者,我可以告诉您,我最初将组件开发为Zend\Module(我真的不喜欢Manager作为后缀)。在one of our weekly IRC meetings中确定Zend\Module含糊不清,并在其后缀“Manager”将以某种方式解决这种歧义。显然,我对此事不赞成。我的意思是,根据任何定义,Zend\ModuleManager都没有发展成为“经理”的任何规范。

    服务

    在ZF2中,关于Zend\ServiceManager,“服务”只是对象(从技术上讲,也可以是数组)。可以将ServiceManager组件视为应用程序可能需要的各种“服务”(对象)的简单键值注册表。这些“服务”通常是已配置的邮件程序,记录器,数据库适配器,应用程序配置等。当然,ServiceManager不仅是简单的注册表,其主要功能是将服务(及其依赖项)的实例化推迟到他们实际上是需要的; aka延迟加载);我已经写了一个blog post which explains the various features of the ServiceManager in depth



    我认为在这种情况下,您可能在这里将“经理”一词与“服务”混为一谈。在ServiceManager中注册的内容可以简称为“服务”。这可能会造成混淆,因为您确实可以将某种“经理”注册为服务。例如,您可能拥有Zend\Session\SessionManager实例的“ session ”服务。随之而来的是进一步的困惑,因为术语“服务”通常是指构成service layer的一部分的类。

    因此,很遗憾,是的,ZF2中的术语可能有点模糊,但是一旦您理解了几个相对简单的核心概念,那么出色的设计确实会带来一些惊人的灵活性,在我看来,这是其他大多数产品所无法比拟的。现有的框架。

    希望这可以帮助。

    关于php - Zend Framework 2中Service和Manager类之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12261442/

    10-11 20:24