Repository-Muster
Um den Code sauber und lesbar zu halten, ist es sehr nützlich, Repository Pattern
zu verwenden. Tatsächlich müssen wir Laravel
nicht nur verwenden, um dieses spezielle Entwurfsmuster zu verwenden. Im folgenden Szenario werden wir jedoch das OOP
-Framework Laravel
verwenden, um zu zeigen, wie wir repositories
verwenden, um unser zu erstellen Controller
Ebenen sind weniger ausführlich, entkoppelter und besser lesbar. Schauen wir genauer hin.
Verwenden Sie nicht repositories
. Tatsächlich ist es nicht notwendig, Repositories
zu verwenden. Mit der Zeit können Sie jedoch die meisten Dinge in Ihrer Anwendung erledigen Wenn Sie sich beispielsweise nicht für die Verwendung von Repositories
entscheiden, wird es sehr schwierig, Ihre Anwendung zu testen (Austausch von Implementierungen). Die spezifische Implementierung wird sehr kompliziert Schauen Sie sich eines unten an. 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')); } }
Dies ist ein sehr typischer Code, der Eloquent
verwendet, um mit der Datenbank zu interagieren. Dieser Code funktioniert normal, aber das controller
Ebene Wird für Eloquent
eng gekoppelt. Hier können wir ein repository
einfügen, um eine entkoppelte Version des Codes zu erstellen. Diese entkoppelte Version des Codes kann die spezifische Implementierung nachfolgender Programme vereinfachen.
Die Verwendung von repositories
erfordert tatsächlich einige Schritte, um den gesamten repository
-Modus abzuschließen, aber wenn Sie ihn ein paar Mal ausführen, wird es natürlich zur Gewohnheit. Wir werden es im Detail erläutern Beschreiben Sie unten jeden Schritt.
Repository
-Ordner . Zuerst müssen wir unseren eigenen app
Ordner Repository
im Ordner repositories
erstellen, und dann muss jede Datei im Ordner festgelegt werden den entsprechenden Namensraum.
Interface
-Klasse Der zweite Schritt besteht darin, die entsprechende Schnittstelle zu erstellen, die die relevanten Methoden bestimmt, die unsere repository
-Klasse implementieren muss, wie im Folgenden gezeigt Beispiel: Es wird noch einmal betont, dass der Namespace hinzugefügt werden muss. HouseRepositoryInterface.php
<?php namespace App\Repositories; interface HouseRepositoryInterface { public function selectAll(); public function find($id); }
Repository
-Klasse Jetzt können wir unsere repository
-Klasse erstellen, für die wir die Arbeit erledigen Mit uns können wir in dieser Klassendatei die meisten unserer Datenbankabfragen ablegen, egal wie komplex sie auch sein mögen. Wie im folgenden Beispiel 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><span> </span></span></code>
Zuerst müssen Sie das verstehen sogenannter Dienstanbieter, bitte Referenzhandbuch Dienstanbieter 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><span> </span></span></code>
Natürlich können Sie auch einen neuen Ordner erstellen, um hauptsächlich unsere verwandte Dateien. provider
Was der obige Code hauptsächlich besagt, ist, dass wir wissen, dass Sie
verwenden werden, wenn Sie Typhinweise controller
in der Ebene HouseRepositoryInterface
verwenden.DbHouseRepository
Providers Array
zur App hinzufügen / Fügen Sie im Array providers
in config/app.php einfach providers
AppRepositoriesBackendServiceProvider::class,
controller
, um den vorherigen komplexen Datenbankaufruf zu ersetzen, wie folgt: Controller
HousesController.php
<?php use App\repositories\HouseRepositoryInterface; class HousesController extends BaseController { 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')); } }
Das Obige hat den Laravel-Repository-Modus und einige Aspekte davon vorgestellt. Ich hoffe, dass er Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird.