zicht/service-wrapper

服务包装类


README

提供包装器,以轻松实现影响服务响应和请求的面向方面的方法。

脚本

  • 单元测试: composer test
  • 代码风格检查: composer lint

通用方法

所有对服务的调用都被包装在一个调用中,该调用通知所有 观察者 的调用。观察者有机会进行自己的清理工作,甚至修改请求或响应。

任何观察者都必须实现 notifyBeforealterRequestalterResponsenotifyAfter 方法。每个观察者都会得到一个 ServiceCall 对象的实例,该对象包含请求和响应对象。这基本上与事件循环的工作方式相同,但有意不实现为事件循环,以避免设置分发器和监听器结构的开销。

常用观察者

对于两种非常常见的实践,提供了日志记录器和缓存观察者。

示例

class MyService
{
    public function doIt($name)
    {
        return sprintf("Hi, %s, you have %d marbles in your pocket!", $name, rand());
    }
}

class MyObserver implements ServiceObserverInterface
{
    public function notifyBefore(ServiceCallInterface $call) {}
    public function notifyAfter(ServiceCallInterface $call) {}
    public function alterRequest(ServiceCallInterface $call) {}
    public function alterResponse(ServiceCallInterface $call)
    {
        $call->setResponse(strrev($call->getResponse()->getResponse()));
    }
}

$wrapper = new ServiceWrapper(new MyService());
$wrapper->registerObserver(new MyObserver());

echo $wrapper->doIt("Bart");
echo $wrapper->doIt("Lisa");

有关更详细的示例,请参阅 doc/example.php

应用

您可以实现以下观察者

  • 向响应中添加更多数据,例如丰富数据
  • 添加基本日志记录
  • 使用您自己的观察者广泛监控请求和响应
  • 添加在开发中成本高昂但可以轻松隔离在一个对象中的健全性检查等
  • 添加缓存

维护者