Laravel Repository 模式,laravelrepository
Laravel Repository 模式,laravelrepository
Repository 模式
为了保持代码的整洁性和可读性,使用Repository Pattern
是非常有用的。事实上,我们也不必仅仅为了使用这个特别的设计模式去使用Laravel
,然而在下面的场景下,我们将使用OOP
的框架Laravel
去展示如何使用repositories
使我们的Controller
层不再那么啰嗦、更加解耦和易读。下面让我们更深入的研究一下。
不使用 repositories
其实使用Repositories
并不是必要的,在你的应用中你完全可以不使用这个设计模式的前提下完成绝大多数的事情,然而随着时间的推移你可能把自己陷入一个死角,比如不选择使用Repositories
会使你的应用测试很不容易,(swapping out implementations)具体的实现将会变的很复杂,下面我们看一个例子。HousesController.php
<?php class HousesController extends BaseController { public function index() { $houses = House::all(); return View::make('houses.index',compact('houses')); } public function create() { return View::make('houses.create'); } public function show($id) { $house = House::find($id); return View::make('houses.show',compact('house')); } }
这是一个很典型的一段代码使用Eloquent
和数据库交互,这段代码工作的很正常,但是controller
层对于Eloquent
而言将是紧耦合的。在此我们可以注入一个repository
创建一个解耦类型的代码版本,这个解耦的版本代码可以使后续程序的具体实现更加简单。
使用 repositories
其实完成整个repository
模式需要相当多的步骤,但是一旦你完成几次就会自然而然变成了一种习惯了,下面我们将详细介绍每一步。
1.创建 Repository
文件夹
首先我们需要在app
文件夹创建自己Repository
文件夹repositories
,然后文件夹的每一个文件都要设置相应的命名空间。
2: 创建相应的 Interface
类
第二步创建对应的接口,其决定着我们的repository
类必须要实现的相关方法,如下例所示,在此再次强调的是命名空间一定要记得加上。HouseRepositoryInterface.php
<?php namespace App\Repositories; interface HouseRepositoryInterface { public function selectAll(); public function find($id); }
3:创建对应的 Repository
类
现在我们可以创建我们repository
类 来给我们干活了,在这个类文件中我们可以把我们的绝大多数的数据库查询都放进去,不论多么复杂。如下面的例子DbHouseRepository.php
<?php namespace App\Repositories; use House; class DbHouseRepository implements HouseRepositoryInterface { public function selectAll() { return House::all(); } public function find($id) { return House::find($id); } }
<code><span class="php"><span class="hljs-preprocessor"> </span></span></code>
4:创建后端服务提供
首先你需要理解所谓服务提供,请参考手册服务提供者BackendServiceProvider.php
<?php namespace App\Repositories; use IlluminateSupportSeriveProvider; class BackSerivePrivider extends ServiceProvider { public function register() { $this->app->bind('App\Repositories\HouseRepositoryInterface', 'App\Repositories\DbHouseRepository'); } }
<code><span class="php"><span class="hljs-preprocessor"> </span></span></code>
当然你也可以新建一个文件夹主要放我们的provider
相关文件。
上面一段代码主要说的是,当你在controller
层使用类型提示HouseRepositoryInterface
,我们知道你将会使用DbHouseRepository
.
5:更新你的Providers Array
其实在上面的代码中,我们已经实现了一个依赖注入,但如果我们要使用在此我们是需要手动去写的,为了更为方面,我们需要增加这个providers
到app/config/app.php 中的 providers
数组里面,只需要在最后加上App\Repositories\BackendServiceProvider::class,
6:最后使用依赖注入更新你的controller
当我们完成上面的那些内容之后,我们在Controller
只需要简单的调用方法代替之前的复杂的数据库调用,如下面内容:HousesController.php
<?php use App\repositories\HouseRepositoryInterface; class HousesController extends BaseController { protected $house; public function __construct(HouseRepositoryInterface $house) { $this->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')); } }
这样 整个模式的转换就完成了

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perintah EXPLAIN dalam Oracle digunakan untuk menganalisis pelan pelaksanaan pernyataan SQL Kaedah penggunaan adalah untuk menambah kata kunci EXPLAIN sebelum pernyataan SQL. EXPLAIN keputusan mengandungi maklumat seperti ID, jenis operator, anggaran kiraan baris, anggaran kos, anggaran kiraan baris output, predikat akses dan predikat penapis, yang boleh digunakan untuk mengoptimumkan prestasi pertanyaan, mengenal pasti pengendali yang mahal dan jadual yang mungkin mendapat manfaat daripada pengoptimuman teknik.

Aksara dalam SQL disertakan dalam petikan tunggal, seperti 'A'. Rentetan disertakan dalam petikan berganda, dan aksara serta rentetan adalah jenis yang berbeza. Aksara yang disertakan dalam petikan tunggal disimpan tidak berubah, dan rentetan yang disertakan dalam petikan berganda boleh mengandungi urutan melarikan diri. Watak petikan tunggal itu sendiri boleh disimpan dengan urutan pelarian, seperti '\'''.

Pertanyaan Pangkalan Data ThinkPhp6: Cara Menggunakan TP6 Untuk Melaksanakan Penyata SQL SelectSum (Jin), Sum (Chu) FromSySdBuil dalam Rangka ThinkPhp6, Cara Menggunakan Penyata SQL Pilih ...

Bagaimana untuk melaksanakan penyortiran senarai produk dengan menyeret. Semasa berurusan dengan penyortiran senarai produk front-end, kami menghadapi keperluan yang menarik: Pengguna melakukannya dengan menyeret produk ...

Bagaimana untuk menyusun senarai produk dengan menyeret? Semasa berurusan dengan platform e-dagang atau aplikasi yang serupa, anda sering memenuhi keperluan untuk menyusun senarai produk ...

Paparan dalam SQL ialah jadual maya yang dihasilkan dengan menanyakan jadual asas dan sebenarnya tidak menyimpan data Ia memberikan kelebihan pengabstrakan data, kawalan keselamatan, pengoptimuman prestasi dan organisasi logik. Paparan dibuat melalui kenyataan CREATE VIEW dan operasi seperti pertanyaan, kemas kini dan padam boleh digunakan, tetapi kemas kini pada paparan akan mempengaruhi jadual asasnya. Perbezaan utama antara paparan dan jadual ialah storan data (maya vs. sebenar), prestasi (paparan secara umumnya lebih pantas), impak kemas kini (paparan mempengaruhi jadual asas, jadual tidak) dan fleksibiliti (paparan boleh menukar pertanyaan pada bila-bila masa, manakala skema jadual sukar diubah).

Optimumkan operasi pangkalan data aplikasi web: Pengumpulan sambungan: guna semula sambungan pangkalan data dan kurangkan overhed mencipta dan memusnahkan sambungan. Pertanyaan prapenyusun: Elakkan menyusun semula pernyataan SQL setiap kali anda membuat pertanyaan, meningkatkan kecekapan pertanyaan. Urus Niaga: Pastikan sifat ACID operasi pangkalan data untuk mencapai atomicity, konsistensi, pengasingan dan ketahanan.

Menggunakan Spring ...
