国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

定制化:資源服務(wù)的再實(shí)現(xiàn)

2018-11-21 21:20 更新

美到極致不是無可增加,而是無可減少。 -- Antonie de Saint-Exupery

2.18.1 資源服務(wù)

資源可以理解成接口開發(fā)過程中所使用到的第三方系統(tǒng)、功能,如數(shù)據(jù)庫,COOKIE、緩存;而服務(wù)則是指領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中無狀態(tài)的服務(wù)操作,如加密、過濾器、加載器等。
而在PhalApi中,資源和服務(wù)更多是通過DI來統(tǒng)一進(jìn)行管理。并且我們使用資源服務(wù)來統(tǒng)稱這兩者。

在使用PhalApi進(jìn)行開發(fā)時(shí),應(yīng)該分別從以下三個(gè)層面來使用資源服務(wù)。

  • 1、基本使用
  • 2、高級應(yīng)用
  • 3、定制擴(kuò)展

其中,基本使用是指使用框架默認(rèn)提供的特性、功能,只需要稍微修改調(diào)整一下配置(甚至連配置都不需要修改)即可使用; 高級應(yīng)用是指切換使用具有同類特性、功能的資源服務(wù),對客戶端而言,其實(shí)現(xiàn)的功能是等價(jià)的,只在于內(nèi)部實(shí)現(xiàn)不同,通常此層面適用于有不同需求的應(yīng)用場景; 最后是,定制擴(kuò)展則是充滿活力、生氣的做法,對于項(xiàng)目需要用到而框架未提供的,都可以通過此方式進(jìn)行定制、擴(kuò)展。

2.18.2 仍然以緩存為例

下面以大家熟悉的緩存為例,分別說明這三個(gè)層面的演進(jìn)使用。

(1)基本使用

在./Public/init.php初始化文件中,我們可以去掉對Memcache的注釋,從而在項(xiàng)目啟用cache這一資源服務(wù)。

//緩存 - Memcache/Memcached
DI()->cache = function () {
    return new PhalApi_Cache_Memcache(DI()->config->get('sys.mc'));
};

或者,我們還需要根據(jù)配置的MC不同,稍微更改一下./Config/sys.php中對應(yīng)的配置:

    /**
     * MC緩存服務(wù)器參考配置
     */
     'mc' => array(
           'host' => '127.0.0.1',
           'port' => 11211,
     ),

然后,就可以在項(xiàng)目中如前面說的那樣使用cache進(jìn)行對緩存進(jìn)行操作。

//設(shè)置緩存
DI()->cache->set($key, $value, $expireTime);

//讀取緩存
$rs = DI()->cache->get($key);

(2)高級應(yīng)用

但是我們都知道,緩存的實(shí)現(xiàn)方案以及存儲的方式多種多樣,包括但不限于:數(shù)據(jù)庫緩存、文件緩存、COOKIE/session緩存、Redis緩存、APC緩存。

假設(shè)我們需要切換到Redis緩存,則可以在init.php初始化中,把DI()->cache注冊成Redis緩存即可。

DI()->cache = function () {
    return new PhalApi_Cache_Redis(DI()->config->get('sys.redis'));
};

同時(shí),在./Config/sys.php中添加對應(yīng)的配置:

     'redis' => array(
           'host' => '127.0.0.1',
           'port' => 9527,
     ),

(3)定制擴(kuò)展

毫無疑義,實(shí)際項(xiàng)目需要面對的開發(fā)場景更為復(fù)雜,可能需要使用到加密、壓縮、分片或者其他處理手段,又可能使用其他存儲媒介。

當(dāng)框架基本的特性無法滿足時(shí),這時(shí)就需要考慮進(jìn)行定制擴(kuò)展了。值得慶幸的是,實(shí)現(xiàn)這一點(diǎn)并不難。一如往常那樣,我們需要 先實(shí)現(xiàn)、再注冊 。

實(shí)現(xiàn)資源服務(wù)接口

很多通常的資源服務(wù),我們都統(tǒng)一了接口規(guī)約。在[1.19]-DI服務(wù)速查:各資源服務(wù)一覽表 中可以查到每個(gè)資源服務(wù)所需要實(shí)現(xiàn)的接口。

如這次的緩存接口類是:

<?php

interface PhalApi_Cache {

    /**
     * 設(shè)置緩存
     * 
     * @param string $key 緩存key
     * @param mixed $value 緩存的內(nèi)容
     * @param int $expire 緩存有效時(shí)間,單位秒,非時(shí)間戳
     */
    public function set($key, $value, $expire = 600);

    /**
     * 讀取緩存
     * 
     * @param string $key 緩存key
     * @return mixed 失敗情況下返回NULL
     */
    public function get($key);

    /**
     * 刪除緩存
     * 
     * @param string $key
     */
    public function delete($key);
}

我們可以先在項(xiàng)目中,實(shí)現(xiàn)此接口,如:

class Common_MyCache implements PhalApi_Cache {
     // ... ...
}

具體的實(shí)現(xiàn),這里不再舉例。

再注冊

當(dāng)實(shí)現(xiàn)好子類后,我們便可以在init.php初始化文件中,切換到我們自己的定制類。

DI()->cache = 'Common_MyCache';

2.18.3 實(shí)現(xiàn)、定制化你的資源服務(wù)

正如《項(xiàng)目百態(tài)》書中隱藏的美模式一節(jié)中寫道的“恰恰相反,只有減少特性才能提升設(shè)計(jì)的美感。最好的設(shè)計(jì)都是功能明確又留有答題,也是易于測試的,即使要作修改,也不會帶來新的麻煩。”

是以,作為一個(gè)框架,我們應(yīng)當(dāng)以發(fā)散的方式去設(shè)計(jì);但為了能為應(yīng)用提供可用的功能,我們又應(yīng)當(dāng)以收斂的方式去實(shí)現(xiàn)。如果我們提供的功能不足以滿足大部分主流的業(yè)務(wù)場景,那么我們至少需要提供可擴(kuò)展的空間。

類似的場景,還包括有接口簽名、對接口參數(shù)的獲取與接口結(jié)果的返回。當(dāng)大家在進(jìn)行項(xiàng)目開發(fā)過程中,有不同的場景需求時(shí),可以按上面介紹的三個(gè)層面分別進(jìn)行。

先嘗試使用簡單、默認(rèn)的方式進(jìn)行配置解決,再切換到框架或已有的解決方案,最后再嘗試擴(kuò)展自己的定制類。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號