Repository 模式
為了保持代碼的整潔性和可讀性,使用Repository Pattern 是非常有用的。事實上,我們也不必僅僅為了使用這個特別的設計模式去使用Laravel,然而在下面的情境下,我們將使用OOP的架構Laravel 去展示如何使用repositories 使我們的Controller層不再那麼囉嗦、更加解耦和易讀。下面讓我們更深入的研究一下。
不使用 repositories
其實使用Repositories並不是必要的,在你的應用中你完全可以不使用這個設計模式的前提下完成絕大多數的事情,然而隨著時間的推移你可能把自己陷入一個死角,比如不選擇使用Repositories會使你的應用測試很不容易,(swapping out implementations)具體的實現將會變的很複雜,下面我們看一個例子。
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('App\Repositories\HouseRepositoryInterface', 'App\Repositories\DbHouseRepository'); }}
當然你也可以建立一個檔案夾主要放我們的provider相關檔案。
上面一段代碼主要說的是,當你在controller層使用類型提示HouseRepositoryInterface,我們知道你將會使用DbHouseRepository.
5:更新你的Providers Array
其實在上面的代碼中,我們已經實現了一個依賴注入,但如果我們要使用在此我們是需要手動去寫的,為了更為方面,我們需要增加這個providers 到app/config/app.php 中的 providers數組裡面,只需要在最後加上App\Repositories\BackendServiceProvider::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')); }} 這樣 整個模式的轉換就完成了
以上就介紹了Laravel Repository 模式,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。