laravel Repository 模式 優化代碼


laravel(商)城代碼優化   Repository 模式
優點:使Controller層更加解耦和易讀
 
第1步 配置composer.json
 
        "infyomlabs/laravel-generator": "dev-master",
        "laravelcollective/html": "5.4.*",
        "infyomlabs/core-templates": "dev-master",

        "infyomlabs/swagger-generator": "dev-master",
        "jlapp/swaggervel": "dev-master",
        "doctrine/dbal": "~2.3",
        "infyomlabs/generator-builder": "dev-master"
 
第2步  App目錄下新建Repositories
 
第3步  Repositories目錄下新建GoodsListRepository .php
 
 
第4步  實現抽象類
namespace App\Repositories;

use App\Models\Shop\GoodsModel;
use InfyOm\Generator\Common\BaseRepository;


/**
* BaseRepository繼承BaseRepository抽象類
* BaseRepository抽象類實現接口*RepositoryInterface,RepositoryCriteriaInterface
**/
class  GoodsListRepository extends BaseRepository{
     public  function model()
    {
        return GoodsModel::class;
    }
    public function getGoodsListByCategoryID($id){
         $goods_list=GoodsModel::where('category_id',$id)->get();
         return $goods_list;
    }
}
第5步 構造
use App\Repositories\GoodsListRepository
 
    protected $goodsListRepo;

    public function __construct(GoodsListRepository $goodsListRepository)
    {
        $this->goodsListRepo = $goodsListRepository;
    }
 
第6步  正常使用啦
/***
     * @param Request $request @分類id
     * @return  @格式collect @分類商品詳情列表
     */
    public  function  getGoodsList(Request $request){

        $category_id=9;
        $good_list=$this->goodsListRepo->getGoodsListByCategoryID($category_id);
        return view('m.shop.good_list')->with('good_list',$good_list);
    }
 
 
深入理解控制反轉(IoC)和依賴注入(DI)
 
定義接口
interface SuperModuleInterface
{
    /**
     * 超能力激活方法
     *
     * 任何一個超能力都得有該方法,並擁有一個參數
     *@param array $target 針對目標,可以是一個或多個,自己或他人
     */
    public function activate(array $target);
}
 
實現接口創建類
/**
 * X-超能量
 */
class XPower implements SuperModuleInterface
{
    public function activate(array $target)
    {
        // 這只是個例子。。具體自行腦補
    }
}
/**
 * 終極炸彈 (就這么俗)
 */
class UltraBomb implements SuperModuleInterface
{
    public function activate(array $target)
    {
        // 這只是個例子。。具體自行腦補
    }
}

 

對超人初始化的方法進行改造:

class Superman
{
    protected $module;
    public function __construct(SuperModuleInterface $module)
    {
        $this->module = $module;
    }
}

什么叫做依賴注入?

本文從開頭到現在提到的一系列依賴,只要不是由內部生產(比如初始化、構造函數 __construct 中通過工廠方法、自行手動 new 的),而是由外部以參數或其他形式注入的,都屬於依賴注入(DI) 。是不是豁然開朗?事實上,就是這么簡單。下面就是一個典型的依賴注入:

// 超能力模組
$superModule = new XPower;
// 初始化一個超人,並注入一個超能力模組依賴
$superMan = new Superman($superModule);
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM