PSR6合理性討論

來源:互聯網
上載者:User
我現在在嘗試寫一個 PSR-6的實現

當我在實現CacheItemPoolInterface介面時,對於save方法感到困惑,save方法只接收一個CacheItemInterface類型的參數,但是CacheItemInterface這個介面卻沒有提供類似getExpireTime的方法,這就導致CacheItemPoolInterface沒有辦法擷取到快取項目的到期時間,也就沒辦法正確地將資料寫入到緩衝儲存裡。

我看過幾個比較著名的PSR-6實現,例如 symfony/cache php-cache/cache tedious/Stash 然而這些實現版本在實現save方法時並不是非常優雅。

比如symfony/cache

public function save(CacheItemInterface $item){    if (!$item instanceof CacheItem) {        return false;    }    if ($this->deferred) {        $this->commit();    }    $this->deferred[$item->getKey()] = $item;    return $this->commit();}

這個save方法只有傳入Symfony\Component\Cache\CacheItem類型的參數才可以,傳入其他類型都會返回false

目前的情況是,如果想要寫一個用到緩衝的類庫,就必須指定一個具體的PSR-6實現作為依賴,而不僅僅是psr/cache。而反觀PSR-3這個日誌介面,要寫一個需要日誌功能的類庫,只需要引入psr/log即可,不需要具體實現。

在我看來,PSR-6並不需要CacheItemInterface這個介面,只需要把save方法修改成save($key, $value, $expire_at)即可。

我在packagist上面搜尋cache,其他一些比較出名的緩衝庫,例如doctrine/cache sonata-project/cache illuminate/cache等,都沒有選擇遵循PSR-6,應該也是這方面的考慮吧

回複內容:

我現在在嘗試寫一個PSR-6的實現

當我在實現CacheItemPoolInterface介面時,對於save方法感到困惑,save方法只接收一個CacheItemInterface類型的參數,但是CacheItemInterface這個介面卻沒有提供類似getExpireTime的方法,這就導致CacheItemPoolInterface沒有辦法擷取到快取項目的到期時間,也就沒辦法正確地將資料寫入到緩衝儲存裡。

我看過幾個比較著名的PSR-6實現,例如 symfony/cache php-cache/cache tedious/Stash 然而這些實現版本在實現save方法時並不是非常優雅。

比如symfony/cache

public function save(CacheItemInterface $item){    if (!$item instanceof CacheItem) {        return false;    }    if ($this->deferred) {        $this->commit();    }    $this->deferred[$item->getKey()] = $item;    return $this->commit();}

這個save方法只有傳入Symfony\Component\Cache\CacheItem類型的參數才可以,傳入其他類型都會返回false

目前的情況是,如果想要寫一個用到緩衝的類庫,就必須指定一個具體的PSR-6實現作為依賴,而不僅僅是psr/cache。而反觀PSR-3這個日誌介面,要寫一個需要日誌功能的類庫,只需要引入psr/log即可,不需要具體實現。

在我看來,PSR-6並不需要CacheItemInterface這個介面,只需要把save方法修改成save($key, $value, $expire_at)即可。

我在packagist上面搜尋cache,其他一些比較出名的緩衝庫,例如doctrine/cache sonata-project/cache illuminate/cache等,都沒有選擇遵循PSR-6,應該也是這方面的考慮吧

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.