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')); } }
这样 整个模式的转换就完成了

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La commande EXPLAIN dans Oracle est utilisée pour analyser le plan d'exécution d'une instruction SQL. La méthode d'utilisation consiste à ajouter le mot-clé EXPLAIN avant l'instruction SQL. Les résultats EXPLAIN contiennent des informations telles que l'ID, le type d'opérateur, l'estimation du nombre de lignes, l'estimation du coût, l'estimation du nombre de lignes en sortie, les prédicats d'accès et les prédicats de filtre, qui peuvent être utilisés pour optimiser les performances des requêtes, identifier les opérateurs coûteux et les tables pouvant bénéficier d'une optimisation. techniques.

Les caractères en SQL sont placés entre guillemets simples, tels que « A ». Les chaînes sont placées entre guillemets doubles et les caractères et les chaînes sont de types différents. Les caractères entourés de guillemets simples sont stockés inchangés et les chaînes entourées de guillemets doubles peuvent contenir des séquences d'échappement. Le guillemet simple lui-même peut être stocké avec une séquence d'échappement, telle que '\'''.

ThinkPhp6 Database Query: Comment utiliser TP6 pour implémenter les instructions SQL SelectSum (Jin), SUM (CHU) NOSYSDBUIL dans le framework ThinkPhp6, comment utiliser la déclaration SQL Select ...

Une vue en SQL est une table virtuelle générée par l'interrogation d'une table de base et qui ne stocke pas réellement de données. Elle offre les avantages de l'abstraction des données, du contrôle de sécurité, de l'optimisation des performances et de l'organisation logique. Les vues sont créées via l'instruction CREATE VIEW et des opérations telles que la requête, la mise à jour et la suppression peuvent être utilisées, mais les mises à jour de la vue affecteront sa table de base. Les principales différences entre les vues et les tables sont le stockage des données (virtuel ou réel), les performances (les vues sont généralement plus rapides), l'impact de la mise à jour (les vues affectent les tables de base, contrairement aux tables) et la flexibilité (les vues peuvent modifier les requêtes à tout moment, tandis que schéma de table difficile à modifier).

Comment implémenter le tri de la liste de produits en faisant glisser. Lorsque vous traitez avec le tri de la liste des produits frontaux, nous sommes confrontés à un besoin intéressant: les utilisateurs le font en faisant glisser des produits ...

Comment trier la liste des produits en faisant glisser? Lorsque vous traitez avec des plateformes de commerce électronique ou des applications similaires, vous rencontrez souvent la nécessité de trier la liste de produits ...

Optimisez les opérations de base de données des applications Web : Regroupement de connexions : réutilisez les connexions de base de données et réduisez les frais liés à la création et à la destruction de connexions. Requêtes précompilées : évitez de recompiler les instructions SQL à chaque fois que vous effectuez une requête, ce qui améliore l'efficacité des requêtes. Transaction : garantissez les propriétés ACID des opérations de base de données pour obtenir l'atomicité, la cohérence, l'isolement et la durabilité.

Comment obtenir OpenId grâce à l'enregistrement frontal et le stocker dans la base de données? Pendant le processus de développement, il est souvent nécessaire de gérer les fonctions d'enregistrement des utilisateurs, y compris l'obtention de l'utilisateur de base ...
