我现在使用Zend Framework 2已有一段时间了.不过,我真的不了解它的结构和组件.这很可能是因为我对PHP和相关模式的一般了解.
特别是:
>什么是服务?
我知道框架的一个中心设计模式是服务定位器模式,但我还没有真正掌握服务的内容.此外,当人们谈论“实施服务层”时,人们的意思是什么?
>什么是插件?
我认为在Zend Framework 2中,正确的术语是“控制器插件”.据我所知,它可能只是一个包装器,一个提供一个很好的API用于控制器的类.
示例:而不是再次调用相同的10行代码&再次,它们可以包含在一个控制器插件中,该插件包含一个封装这10行的方法,因此可以通过一个方法调用完成同样的操作.它是否正确?
如果它是正确的:我为什么要将代码封装在一个插件中,我不能在没有插件的情况下将它添加到控制器中吗?
解决方法:
The basic idea behind a service locator is to have an object that kNows how to get hold of all of the services that an application might need. […] With a Service Locator every user of a service has a dependency to the locator. The locator can hide dependencies to other implementations, but you do need to see the locator.
ZF2 PluginManager是一种ServiceLocator.它知道如何创建控制器插件并控制它们的生命周期.控制器依赖于Manager.
Defines an application’s boundary with a layer of services that establishes a set of available operations and coordinates the application’s response in each operation.
ServiceLayers通常是没有自己状态的类.他们只协调其他课程.边界封装了应用程序中的某些用例.有关详细信息,请参阅http://martinfowler.com/bliki/BoundedContext.html.
Links classes during configuration rather than compilation. […] Configuration shouldn’t be scattered throughout your application, nor should it require a rebuild or redeployment. Plugin solves both problems by providing centralized, runtime configuration.
ZF控制器插件允许您将各个问题(如getting the Identity of a User, accessing Params from the Request, setting a Flash Message)分离为离散单元.拥有这些帮助Separation of Concerns并防止God Controllers.简而言之:如果您需要在控制器之间共享代码,请将其放入插件中.