我现在使用Zend Framework 2已有一段时间了。不过,我真的不了解它的结构和组件。这很可能是因为我对PHP和相关模式的一般了解。
特别是:
什么是服务?
我知道框架的一个中心设计模式是服务定位器模式,但我还没有真正掌握服务的内容。此外,当人们谈论“实施服务层”时,人们的意思是什么?
什么是插件?
我认为在Zend Framework 2中,正确的术语是“控制器插件”。根据我的理解,它可能只是一个包装器,一个提供用于控制器的良好api的类
示例:而不是再次调用相同的10行代码&再次,它们可以包含在一个控制器插件中,该插件包含一个封装这10行的方法,因此可以通过一个方法调用完成同样的操作。这是对的吗?
如果它是正确的:我为什么要将代码封装在一个插件中,我不能在没有插件的情况下将它添加到控制器中吗?
答案 0 :(得分:6)
服务定位器背后的基本思想是拥有一个知道如何获取应用程序可能需要的所有服务的对象。 [...]使用服务定位器,服务的每个用户都对定位器具有依赖性。定位器可以隐藏其他实现的依赖关系,但您确实需要查看定位器。
ZF2 PluginManager是一种ServiceLocator。它知道如何创建控制器插件并控制它们的生命周期。控制器依赖于管理器。
定义应用程序与一层服务的边界,这些服务建立一组可用操作并协调应用程序在每个操作中的响应。
ServiceLayers通常是没有自己状态的类。他们只协调其他课程。边界封装了应用程序中的某些用例。有关详细信息,请参阅http://martinfowler.com/bliki/BoundedContext.html。
在配置而不是编译期间链接类。 [...]配置不应分散在整个应用程序中,也不应该需要重建或重新部署。插件通过提供集中的运行时配置解决了这两个问题。
ZF控制器插件允许您将getting the Identity of a User, accessing Params from the Request, setting a Flash Message等个别问题分离为离散单位。通过Separation of Concerns获得这些帮助并阻止God Controllers。简而言之:如果您需要在控制器之间共享代码,请将其放入插件中。