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)

原文链接: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);
时间: 2024-08-01 15:21:34

laravel Repository 模式 优化代码的相关文章

LCLFramework框架之Repository模式

Respository模式在示例中的实际目的小结一下 Repository模式是架构模式,在设计架构时,才有参考价值: Repository模式主要是封装数据查询和存储逻辑: Repository模式实际用途:更换.升级ORM 引擎,不影响业务逻辑: Repository模式能提高测试效率,单元测试时,用Mock对象代替实际的数据库存取,可以成倍地提高测试用例运行速度. Repository与Dal的区别 Repository是DDD中的概念,强调Repository是受Domain驱动的,Re

代码重构:用工厂+策略模式优化过多的if else代码块

最近在工作中优化了一段冗余的if else代码块,感觉对设计模式的理解和运用很有帮助,所以分享出来.鉴于原代码会涉及到公司的隐私,因此就不贴出来了.下面以更加通俗易懂的案例来解析. 假如写一个针对员工上班不遵守制度做相应惩罚的程序,比如,上班迟到:罚100:上班睡觉:罚1000:上班早退:警告:上班玩游戏:严重警告:上班谈恋爱:开除等,通常都会这样写: public class WorkPunish { public static void main(String[] agrs){ String

Repository模式与UnitOfWorks模式的运用

软件开发就像是一个江湖,而设计模式就是一本高深的秘籍每读一次.用一次.想一次都能得到新的领悟,让我们的设计技能有所提高.开始时我们可能会“为了模式而模式”,让代码变得乱78糟甚至难以让人理解,但随着设计能力的提高与模式的运用和理解,慢慢地我们可能会忘掉模式随心所欲,此时再读读代码或者你已经发现自己的工程已融合模式之美—"模式为设计而生,设计为需求而活".在开篇突然想分享一下这10几年用模式的一点小小的领悟. IRepository 与 IUnitOfWork 在2011年我曾在Code

Repository模式

近来发现很多ASP.NET MVC的例子中都使用了Repository模式,比如Oxite,ScottGu最近发布的免费的ASP.NET MVC教程都使用了该模式.就简单看了下. 在<企业架构模式>中,译者将Repository翻译为资源库.给出如下说明:通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调. 在<领域驱动设计:软件核心复杂性应对之道>中,译者将Repository翻译为仓储,给出如下说明:一种用来封装存储,读取和查找行为的机制,它模拟了一个对象

Entity Framework Repository模式

Repository模式之前 如果我们用最原始的EF进行设计对每个实体类的“C(增加).R(读取).U(修改).D(删除)”这四个操作. 第一个:先来看看查询,对于实体类简单的查询操作,每次都是这样的过程会在代码中拥有大量的重复 极为类似的代码段. using (var db = new EFContext("EFContext")) { var persons = db.Persons.Where(t => t.PersonName == "aehyok")

实验二:对试验一进行优化代码

1.使用自动类型推断和对象初始化器优化代码 自动类型推断和初始化器的语法知识请参考[Asp.net入门2-01]C#基本功能 在实验一中,打开Listing.aspx.cs文件,修改GetProducts()方法: 1 protected IEnumerable<Product> GetProducts() 2 { 3 IList<Product> products = new List<Product>(); 4 5 var sql = "select Pr

App 组件化/模块化之路——Repository 模式

什么是 Repository 模式 Repository 这个词直译过来仓库.仓储的意思.这个意思其实也能反应出 Repository 模式作用.App 开发中少不了对数据的操作,数据的来源可能有很多种:网络.数据库.文件以及内存中的缓存.而 Repository 就相当于一个仓库管理员,管理这些数据的存储.当业务层想要获取或者存储数据时,只需要通过 Repository 的管理员进行操作.这样的好处就是:屏蔽数据来源的操作接口.对于业务层来说不必关心数据存在哪里,以及如何存储的.而且也符合我们

关于Repository模式

定义(来自Martin Fowler的<企业应用架构模式>): Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects. 个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一 个类似集合的接口提供给领域层进行领域对象的访问.Reposit

MVC中的Repository模式

1.首先创建一个空的MVC3应用程序,命名为MyRepository.Web,解决方案命名为MyRepository. 2.添加一个类库项目,命名为MyRepository.DAL,添加一个文件夹命名为Repository来存放业务逻辑. 3.继续添加一个类库项目,命名为MyRepository.Domain,添加两个文件夹Models和Infrastructure. Models来存放实体,Infrastructure来存放几个基本的类.现在目录结构已经搭建好了. 4.用NuGet确保三个项目