资讯专栏INFORMATION COLUMN

为什么你应该使用 Repository

Simon / 2126人阅读

摘要:原文来自模式为了保持代码的整洁性和可读性,使用是非常有用的。这是一个很典型的一段代码使用和数据库交互,这段代码工作的很正常,但是层对于而言将是紧耦合的。

原文来自http://vegibit.com/laravel-repository-pattern/

Repository 模式

为了保持代码的整洁性和可读性,使用Repository Pattern 是非常有用的。事实上,我们也不必仅仅为了使用这个特别的设计模式去使用Laravel,然而在下面的场景下,我们将使用OOP的框架Laravel 去展示如何使用repositories 使我们的Controller层不再那么啰嗦、更加解耦和易读。下面让我们更深入的研究一下。

不使用 repositories

其实使用Repositories并不是必要的,在你的应用中你完全可以不使用这个设计模式的前提下完成绝大多数的事情,然而随着时间的推移你可能把自己陷入一个死角,比如不选择使用Repositories会使你的应用测试很不容易,具体的实现将会变的很复杂,下面我们看一个例子。
HousesController.php


这是一个很典型的一段代码使用Eloquent和数据库交互,这段代码工作的很正常,但是controller层对于Eloquent而言将是紧耦合的。在此我们可以注入一个repository创建一个解耦类型的代码版本,这个解耦的版本代码可以使后续程序的具体实现更加简单。

使用 repositories

其实完成整个repository模式需要相当多的步骤,但是一旦你完成几次就会自然而然变成了一种习惯了,下面我们将详细介绍每一步。

1.创建 Repository 文件夹

首先我们需要在app文件夹创建自己Repository 文件夹repositories,然后文件夹的每一个文件都要设置相应的命名空间。

2: 创建相应的 Interface

第二步创建对应的接口,其决定着我们的repository类必须要实现的相关方法,如下例所示,在此再次强调的是命名空间一定要记得加上。
HouseRepositoryInterface.php


3:创建对应的 Repository

现在我们可以创建我们repository类 来给我们干活了,在这个类文件中我们可以把我们的绝大多数的数据库查询都放进去,不论多么复杂。如下面的例子
DbHouseRepository.php


4:创建后端服务提供

首先你需要理解所谓服务提供,请参考手册服务提供者
BackendServiceProvider.php

app->bind("AppRepositoriesHouseRepositoryInterface", "AppRepositoriesDbHouseRepository");
    }
}

当然你也可以新建一个文件夹主要放我们的provider相关文件。
上面一段代码主要说的是,当你在controller层使用类型提示HouseRepositoryInterface,我们知道你将会使用DbHouseRepository.

5:更新你的Providers Array

其实在上面的代码中,我们已经实现了一个依赖注入,但如果我们要使用在此我们是需要手动去写的,为了更为方面,我们需要增加这个providers 到app/config/app.php 中的 providers数组里面,只需要在最后加上AppRepositoriesBackendServiceProvider::class,

6:最后使用依赖注入更新你的controller

当我们完成上面的那些内容之后,我们在Controller只需要简单的调用方法代替之前的复杂的数据库调用,如下面内容:
HousesController.php

house = $house;
    }


    public function index()
    {
        $houses = $this->house->selectAll();

        return View::make("houses.index", compact("houses"));
        
    }


    public function create()
    {
        return View::make("houses.create");
    }


    public function show($id)
    {
        $house = $this->house->find($id);
        
        return View::make("houses.show", compact("house"));

    }
}

这样整个的流程就完成了。翻译的不太好,请大家见谅,做了一些改动。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21092.html

相关文章

  • 编写的第一个 Android 单元测试

    摘要:什么是单元测试单元测试是对程序的最小单元进行正确性检验的测试工作。编写第一个单元测试单元测试主要使用是测试框架类库的扩展库,需要在中声明测试依赖。目标代码这里以一个简单的中的例子来说明如何写单元测试。TL;DR: 本文主要面向单元测试新手,首先简单介绍了什么是单元测试,为什么要写单元测试,讨论了一下 Android 项目中哪些代码适合做单元测试,并以一个简单例子演示了如何编写属于你的第一个 ...

    番茄西红柿 评论0 收藏0
  • Repository模式下使用laravel

    摘要:仓库地址文档地址清晰的目录结构只负责定义模型如模型关联和等负责处理这个表相关的所有业务逻辑不只是注入相关的任何都可以注入代码定位迅速只负责处理简单的逻辑获取转发数据它应该是简洁干净的所有的验证类所有的模型用户相关的所有模型目录结构应与一致 laravel-repository 仓库地址Github Repository文档地址 清晰的目录结构 Models只负责定义模型(如:模型关联,...

    netScorpion 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<