Php Zend Framework 2中服务类和管理类之间的差异
我对Php Zend Framework 2中服务类和管理类之间的差异,php,zend-framework2,naming-conventions,Php,Zend Framework2,Naming Conventions,我对管理器和服务类名后缀有点困惑 就我所理解的差异而言,经理负责处理(创建、检索、删除等)某些类型的实体。例如,ModuleManager负责加载和返回模块。在本例中,您确实关心实际的实体,模块 然而,服务是提供接口以执行不同类型的流程逻辑的类。例如,LogService向定义的日志编写器发送给定的日志消息。你不在乎它去哪里,做什么,你只想让管理员知道刚刚发生的事情 现在,ZF2提供了一个ServiceManager,它创建并返回给定服务的实例。我无意中习惯了创建管理器并向服务管理器提供工厂,以
管理器
和服务
类名后缀有点困惑
就我所理解的差异而言,经理负责处理(创建、检索、删除等)某些类型的实体。例如,ModuleManager
负责加载和返回模块
。在本例中,您确实关心实际的实体,模块
然而,服务
是提供接口以执行不同类型的流程逻辑的类。例如,LogService
向定义的日志编写器发送给定的日志消息。你不在乎它去哪里,做什么,你只想让管理员知道刚刚发生的事情
现在,ZF2提供了一个ServiceManager
,它创建并返回给定服务的实例。我无意中习惯了创建管理器
并向服务管理器
提供工厂
,以便您可以使用$this->getServiceLocator()->get('managerName')访问管理器
在控制器
上下文中的code>,以保持控制器很小,并且在可测试类中保持真实逻辑。这是目前让我感到困惑的部分,因为显然,不建议使用ServiceLocator
检索Managers
但是:我不是唯一一个这样做的人:条令ORM
模块是另一个例子:默认情况下,它将EntityManager
注册为条令.EntityManager.ORM_默认值
服务
我是否理解了服务
和经理
之间的真正区别?有什么区别吗?管理者
在概念上是否可能从服务
继承而来?我将尝试为您分析ZF2中的管理者和服务
管理者
不幸的是,类中的“manager”一词非常模糊,在ZF2中,这个词的用法有点不一致。因此,对于ZF2中的“管理者”实际上没有权威定义。目前,ZF2中的“经理”最好按如下方式分解:
- ServiceManager-Zend\ServiceManager\ServiceManager
的实例。可以有多个ServiceManager实例——默认情况下,只有“main”服务管理器,它由“services”配置键或由模块的getServiceConfig()方法返回的数组配置
插件管理器-这些扩展了Zend\ServiceManager\PluginManager
,它扩展了Zend\ServiceManager\ServiceManager
,具有一些专门的功能。这些插件分布在框架中的许多组件中,并提供了以前称为插件加载程序/代理的功能(在早期版本的ZF2中)。这些插件管理器是什么样的初始化东西,和
其他“管理者”-如Zend\ModuleManager\ModuleManager
和Zend\Session\SessionManager
。它们与ServiceManager无关,只是碰巧在名称后面加了“Manager”
我想你可能会感到困惑,试图给一个术语(经理)下一个定义,而这个术语的设计并没有考虑任何具体的定义。作为Zend\ModuleManager
的作者,我可以告诉您,我最初将组件开发为Zend\Module
(我真的不喜欢将Manager作为后缀)。在中确定,Zend\Module
是不明确的,在它后面加上“Manager”将以某种方式解决这种不明确的问题。很明显,我在这件事上落选了。我的观点是,Zend\ModuleManager
没有按照任何定义发展成为“管理者”
服务
在ZF2中,对于Zend\ServiceManager
,“服务”只是对象(从技术上讲也可以是数组)。ServiceManager组件可以看作是应用程序可能需要的各种“服务”(对象)的简单键值注册表。这些“服务”通常是配置好的邮件程序、记录器、数据库适配器、应用程序配置等。当然,ServiceManager不仅仅是一个简单的注册表,它的主要功能是推迟服务(及其依赖项)的实例化,直到实际需要它们为止;又称惰性加载);我写了一封信
我无意中习惯了创建管理器并向ServiceManager提供工厂,这样您就可以使用$this->getServiceLocator()->get('managerName)访问管理器
我想在这种情况下,你可能会把这里的“经理”和“服务”混淆了。向ServiceManager注册的内容可以简单地称为“服务”。这可能会让人困惑,因为您确实可以将某种“经理”注册为服务。例如,您可以拥有一个“会话”服务,它是Zend\session\SessionManager
的实例。进一步的混淆随之而来,因为术语“服务”通常指的是构成服务的一部分的类
因此,不幸的是,ZF2中的术语可能有点模糊,但一旦您理解了两个相对简单的核心概念,伟大的设计确实带来了一些惊人的灵活性,在我看来,这是其他大多数现有框架所无法比拟的
希望这有帮助。Evan,谢谢你的回答,这很有帮助!现在,我必须考虑如何命名“经理”在未来和如何处理我现有的,但这很好。谢谢这是非常清楚的,我建议在ZF2文档的介绍中包含在一个名为“ZF2术语”或类似的段落中