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"
"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;
}
}
$category_id=9;
$good_list=$this->goodsListRepo->getGoodsListByCategoryID($category_id);
return view('m.shop.good_list')->with('good_list',$good_list);
}
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;
}
public function __construct(GoodsListRepository $goodsListRepository)
{
$this->goodsListRepo = $goodsListRepository;
}
第6步 正常使用啦
/***
* @param Request $request @分類id
* @return @格式collect @分類商品詳情列表
*/
public function getGoodsList(Request $request){
/***
* @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);