如何在自定义类或库中实现第三方缓存



我目前正在开发一个小类,它将从缓存解决方案中受益匪浅,因为它会向第三方API发出HTTP请求。

我真的不想强迫用户使用某种特定的预先实现的缓存解决方案。我还想保持使用非常简单。

相反,我更愿意让类的用户决定他或她将使用哪种缓存机制。

在这种情况下,什么是最佳实践实施?

我认为一个简单的getter/setter方法是合适的:

$class->retrieveFromCache(function() {
    return UserDefinedCache::get('user_defined_key');
});
$class->writeToCache(function($value) {
    UserDefinedCache::set('user_defined_key', $value);
});

这使得用户能够使用他或她想要的任何缓存。保持实现和使用非常简单。

此外,该类还必须存储和检索cookie中的值。我会以类似的方式实现它的访问器。因此,用户可以自由使用最适合他或她的环境或框架的cookie机制。

$class->getCookieValue(function() {
    return $_COOKIE['custom_name'];
});
$class->setCookieValue(function($value) {
    setcookie('custom_name', $value);
});

这会是一个好的实施吗?有没有我忽略的缺点?或者有更好的解决方案吗?

我会遵循PSR-6的建议。

如果你想拥有多个适配器,可能有几种方法可以存档。有一家像这样的工厂

$cacheInstance = CacheFactory::get('MyFancyCacheAdapter', ['options' => 'here']);

返回给定适配器的已配置实例。适配器应该实现PSR-6 CacheItemPoolInterface。

无论您如何实现它,首先要记住的是,所有缓存引擎或适配器都应该实现相同的接口,这样它们就很容易切换和使用。

另一方面,我不会试图重新发明轮子。已经有一些做得很好的缓存库了,比如这个。如果你不喜欢,我想你也可以找到很多其他人。

此外,该类还必须存储和检索cookie中的值。我会以类似的方式实现它的访问器。因此,用户可以自由使用最适合他或她的环境或框架的cookie机制。

cookie不是缓存。从技术上讲,你可以实现一个缓存引擎并将数据存储在cookie中,但我认为这是非常误导性的,在技术上是不正确的,并且没有遵循关注点分离的原则。

最新更新