【发布时间】:2018-11-15 16:00:07
【问题描述】:
Symfony's documentation for service factories 解释了如何允许服务容器使用工厂实例化服务,但没有解释当创建失败时推荐的最佳实践是什么,即当服务由于某种原因不可用时。
例如;想象一个 Redis 内存缓存服务。在工厂类中,您有一个将实例化并返回 Redis 客户端对象的方法;
public function createRedisClient() {
$redis = new \Redis();
$connectionResult = $redis->connect($host, $port);
return $redis;
}
如果 Redis 服务器暂时不可用,我希望能够优雅地退回到另一个解决方案来存储我们拥有的任何数据,如果工厂返回 null,抛出某种特定类型的异常,或者根本不关心可用性?
【问题讨论】:
-
假设您希望连接几乎总是可用,只需抛出一个异常。如果你真的想要一个优雅的降级,那么做链的事情并返回某种假缓存,如下面的答案所示。
标签: php symfony service containers graceful-degradation