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);
 
 
 
 
 
 
 
 
 
 
posted @ 2017-12-21 18:03  你爱吃小冬瓜  阅读(1342)  评论(0编辑  收藏  举报