Repository 模式
為了保持程式碼的整潔性和可讀性,使用Repository Pattern
是非常有用的。事實上,我們也不必僅僅為了使用這個特別的設計模式去使用Laravel
,然而在下面的場景下,我們將使用OOP
的框架Laravel
去展示如何使用repositories
使我們的 去展示如何使用
黑
不使用
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和資料庫交互,這段程式碼工作的很正常,但是將雜的。在此我們可以注入一個
repository建立一個解耦類型的程式碼版本,這個解耦的版本程式碼可以讓後續程式的具體實作更加簡單。
使用
repositories
其實完成整個
repository
1.創建
Repository
首先我們需要在
appRepository 資料夾
repositories,然後要設定資料夾對應的每個檔案都必須設定對應的命名空間。
2: 創建對應的
Interface
第二步創建對應的接口,其決定著我們的
repositoryHouseRepositoryInterface.php
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><?php namespace App\Repositories;
interface HouseRepositoryInterface {
public function selectAll();
public function find($id);
}
</pre><div class="contentsignin">登入後複製</div></div>
Repository
類現在我們可以創建我們
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><span> </span></span></code>
首先你需要理解所謂服務提供,請參考手冊服務提供者
🜎
當然你也可以新建一個資料夾主要放我們的provider相關檔案。
上面一段程式碼主要說的是,當你在
controller層使用類型提示
HouseRepositoryInterface,我們知道你將會使用
DbHouseRepository.
.
。在程式碼中,我們已經實現了一個依賴注入,但如果我們要使用在此我們是需要手動去寫的,為了更為方面,我們需要增加這個providers
到app/config/app.php 中的 providers
數組裡面,只需要在最後加上AppRepositoriesBackendServiceProvider::class,
controller
當我們完成上面的那些內容之後,我們在簡單的調用方法取代先前的複雜的資料庫調用,如下面內容:
HousesController.php
<?php namespace App\Repositories; use IlluminateSupportSeriveProvider; class BackSerivePrivider extends ServiceProvider { public function register() { $this->app->bind('App\Repositories\HouseRepositoryInterface', 'App\Repositories\DbHouseRepository'); } }
以上就介紹了Laravel Repository 模式,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。