1. 程式人生 > >laravel Repository 模式 優化代碼

laravel Repository 模式 優化代碼

nds 參數 strong man ted ros extend builder 是不是

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) 原文鏈接:http://laravelacademy.org/post/769.html 定義接口
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);

laravel Repository 模式 優化代碼