lapaz / odango
AOP 启发型的建议/函数组合器
0.2.0
2018-09-05 07:48 UTC
Requires
- php: ^7.0
- ray/aop: ^2.7.3
Requires (Dev)
- phpunit/phpunit: ^7.0|^6.0
This package is auto-updated.
Last update: 2024-09-06 09:14:13 UTC
README
Odango 是一个受面向方面编程(AOP)启发的函数组合器。
即使你不了解 AOP,分离关注点也是更好的实践,例如缓存、日志、事务、安全过滤器、事件分发等。横切关注点应从你的业务逻辑中分离出来。
这不是一个 AOP 编织框架。如果你想使用类似 Google Guice 的完整功能的 AOP,我更推荐使用 Ray.Aop。
示例
$withLoggedTransaction = AdviceComposite::of( function ($invocation) use ($logger) { $logger->info('Starting transaction.'); $result = $invocation->proceed(); $logger->info('Transaction comitted.'); return $result; } )->with( function ($invocation) use ($db) { $db->beginTransaction(); try { $result = $invocation->proceed(); $db->commit(); return $result; } catch (\Exception $ex) { $dbh->rollBack(); throw $ex; } } ); $storeDataInvocation = [$this, 'storeData']; // Some callable $storeDataInvocation = $withLoggedTransaction->bind($storeDataInvocation); $storeDataInvocation($data);
Odango 支持将 Ray.Aop 的 MethodInterceptor 作为组合目标。因此,现有的 AOP 资产可以重用。
注意,由于生成的函数引用了创建上下文,AdviceComposite 实例是不可变的。修改它会破坏它。
已知问题
Joinpoint::getThis()
和 Joinpoint::getMethod()
抛出 BadMethodCallException
,因为没有绑定对象上下文。