微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐