php – Zend框架2:了解插件和服务

我现在使用Zend Framework 2已有一段时间了.不过,我真的不了解它的结构和组件.这很可能是因为我对PHP和相关模式的一般了解.

特别是:

>什么是服务?
我知道框架的一个中心设计模式是服务定位器模式,但我还没有真正掌握服务的内容.此外,当人们谈论“实施服务层”时,人们的意思是什么?
>什么是插件
我认为在Zend Framework 2中,正确的术语是“控制器插件”.据我所知,它可能只是一个包装器,一个提供一个很好的API用于控制器的类.
示例:而不是再次调用相同的10行代码&再次,它们可以包含在一个控制器插件中,该插件包含一个封装这10行的方法,因此可以通过一个方法调用完成同样的操作.它是否正确?
如果它是正确的:我为什么要将代码封装在一个插件中,我不能在没有插件的情况下将它添加到控制器中吗?

解决方法:

ServiceLocator

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.

Service Layer

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.

Plugin

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.简而言之:如果您需要在控制器之间共享代码,请将其放入插件中.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...