mindplay/spatch

此包已被弃用且不再维护。未建议替代包。

递归调度和交付

dev-master 2014-10-28 22:23 UTC

This package is auto-updated.

Last update: 2021-06-25 12:33:10 UTC


README

这个库更多地是关于定义Web应用程序中调度和交付的流程,而不是实际实现任何事情。

目标是将标题和内容的输出与其他不产生输出的活动分开。

强制这种分离有三个重要原因

  1. 分离:处理输出或行为,而不是同时处理两者的代码更容易理解。

  2. 控制:避免PHP中某些操作导致输出提前开始,从而阻止你发送标题或设置会话变量等。

  3. 测试:分离使分阶段测试成为可能,例如测试调度结果,例如选定的视图模板和变量,而不是实际测试渲染的内容。

两个接口定义了一对概念:两种可能返回的结果,例如控制器中的操作方法

  • 可调度结果不发送标题或内容 - 它只是调度并执行任何操作,只要不导致任何标题或内容输出即可。

  • 可交付结果实际上交付结果,这意味着发送标题和/或内容 - 这可以是任何东西,从简单的HTTP状态码用于重定向,到渲染视图或发送图片或文件。

这两个接口本身是相似的 - Dispatchable::dispatch()应返回另一个Dispatchable,或一个Deliverable,而Deliverable::deliver()应返回空值并生成响应。

包含了一个简单的Dispatcher类,它将接受一个DispatchableDeliverable - 它将dispatch()直到返回一个最终的Deliverable,然后最终deliver()结果。

调度器通过抛出异常来强制分离和流程,如果最终结果不是一个Deliverable,并且如果Dispatchable提前产生任何输出,它也会抛出异常。

通过实际阅读Dispatcher的源代码可能更容易理解,这只是一些代码行。