Laravel&Lumen系統(tǒng)之服務剝離

最近隨著業(yè)務的不斷發(fā)展,越來越復雜的邏輯交織在一起使得原來的代碼很難維護,同一個類似的邏輯在多個地方調(diào)用,每次邏輯變更的時候非常容易忘記改其中的一處地方。所以需要抽出一個服務層來處理業(yè)務。
在app目錄下單獨創(chuàng)建了service文件夾來存放所有的服務。根據(jù)大的業(yè)務又分成了不同的子文件夾,針對每個大模塊創(chuàng)建對應的工廠類,以便于后期調(diào)用的時候能夠方便調(diào)用,不需要到不同文件夾找對應的類名。

Paste_Image.png

隨意找其中的一個例子來敘述下,比如說訂單的OrderService.php:

class OrderService
{
    /**
     * 錄入訂單
     * @param $obj
     * @return bool
     */
    public function add($obj)
    {
        ******
    }

    /**
     * 獲取某一個訂單對象
     * @param $id
     * return mixed
     */
    public function getById($id)
    {
        ******
    }

    /**
     * 獲取某一個訂單對象
     * @param $orderSn
     * return mixed
     */
    public function getByOrderSn($orderSn)
    {
        ******
    }

    /**
     * 獲取訂單數(shù)組
     * @param $idArr [3,4,5]
     * @return mixed
     */
    public function getArrByIdArr($idArr)
    {
        ******
    }

    /**
     * 更新訂單狀態(tài)
     * @param $id
     * @param $state
     * $return void
     */
    public function updateState($id, $state)
    {
        ******
    }

這里是訂單相關最基礎的幾個服務,訂單服務類提供的服務基本滿足幾個條件,盡量原子化,粒度盡量小,這樣能夠更好的解耦,當然強數(shù)據(jù)一致性的功能可以放在一起。比如更新訂單狀態(tài)這個功能,可以同時更新訂單明細的狀態(tài)耦合在一起,因為這是非常強數(shù)據(jù)相關的功能。
這樣在原來的Controller里面只需要調(diào)用Service層的服務即可,不需要直接使用Model操作數(shù)據(jù)庫,這樣的好處就是功能復用,以及避免復雜Sql大家寫錯,因為Laravel&Lumen框架的Orm是比較強大的,非常容易寫錯??紤]到一些業(yè)務層面的服務提供,對于每個模塊又有一個Trait,把一些可復用的業(yè)務功能合并在一個方法中,這樣在不同的地方都可以共同調(diào)用。同時在未來業(yè)務更改的時候,只需要修改Trait中對應的方法即可,代碼維護性非常高。

trait ShipStatic
{
    public function orderShip($order, $express, $expresses, $expressNumber)
    {
        // 獲取當前所有需要的服務
        ******

        // 錄入第一條必填快遞信息
        ******

        // 錄入后面可選快遞信息
        ******

        // 計算訂單自動收獲時間
        ******

        // 更新訂單
        ******

        // 更新訂單明細
        ******

        // 更新流水
        ******

        // 通知用戶信息
        ******
    }   
}

Trait中就可以類似于這么寫,這樣所有地方都可以復用,實現(xiàn)代碼封裝。

大家喜歡可以訪問我的個人網(wǎng)站:http://www.yingminxing.com
如有疑問,歡迎溝通交流:QQ:370399195, 微信:yingminxing1988

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容