摘要:原文來自模式為了保持代碼的整潔性和可讀性,使用是非常有用的。這是一個(gè)很典型的一段代碼使用和數(shù)據(jù)庫交互,這段代碼工作的很正常,但是層對于而言將是緊耦合的。
Repository 模式原文來自http://vegibit.com/laravel-repository-pattern/
為了保持代碼的整潔性和可讀性,使用Repository Pattern 是非常有用的。事實(shí)上,我們也不必僅僅為了使用這個(gè)特別的設(shè)計(jì)模式去使用Laravel,然而在下面的場景下,我們將使用OOP的框架Laravel 去展示如何使用repositories 使我們的Controller層不再那么啰嗦、更加解耦和易讀。下面讓我們更深入的研究一下。
不使用 repositories其實(shí)使用Repositories并不是必要的,在你的應(yīng)用中你完全可以不使用這個(gè)設(shè)計(jì)模式的前提下完成絕大多數(shù)的事情,然而隨著時(shí)間的推移你可能把自己陷入一個(gè)死角,比如不選擇使用Repositories會(huì)使你的應(yīng)用測試很不容易,具體的實(shí)現(xiàn)將會(huì)變的很復(fù)雜,下面我們看一個(gè)例子。
HousesController.php
這是一個(gè)很典型的一段代碼使用Eloquent和數(shù)據(jù)庫交互,這段代碼工作的很正常,但是controller層對于Eloquent而言將是緊耦合的。在此我們可以注入一個(gè)repository創(chuàng)建一個(gè)解耦類型的代碼版本,這個(gè)解耦的版本代碼可以使后續(xù)程序的具體實(shí)現(xiàn)更加簡單。
使用 repositories其實(shí)完成整個(gè)repository模式需要相當(dāng)多的步驟,但是一旦你完成幾次就會(huì)自然而然變成了一種習(xí)慣了,下面我們將詳細(xì)介紹每一步。
1.創(chuàng)建 Repository 文件夾首先我們需要在app文件夾創(chuàng)建自己Repository 文件夾repositories,然后文件夾的每一個(gè)文件都要設(shè)置相應(yīng)的命名空間。
2: 創(chuàng)建相應(yīng)的 Interface類第二步創(chuàng)建對應(yīng)的接口,其決定著我們的repository類必須要實(shí)現(xiàn)的相關(guān)方法,如下例所示,在此再次強(qiáng)調(diào)的是命名空間一定要記得加上。
HouseRepositoryInterface.php3:創(chuàng)建對應(yīng)的 Repository類現(xiàn)在我們可以創(chuàng)建我們repository類 來給我們干活了,在這個(gè)類文件中我們可以把我們的絕大多數(shù)的數(shù)據(jù)庫查詢都放進(jìn)去,不論多么復(fù)雜。如下面的例子
DbHouseRepository.php4:創(chuàng)建后端服務(wù)提供首先你需要理解所謂服務(wù)提供,請參考手冊服務(wù)提供者
BackendServiceProvider.phpapp->bind("AppRepositoriesHouseRepositoryInterface", "AppRepositoriesDbHouseRepository"); } }當(dāng)然你也可以新建一個(gè)文件夾主要放我們的provider相關(guān)文件。
上面一段代碼主要說的是,當(dāng)你在controller層使用類型提示HouseRepositoryInterface,我們知道你將會(huì)使用DbHouseRepository.5:更新你的Providers Array
其實(shí)在上面的代碼中,我們已經(jīng)實(shí)現(xiàn)了一個(gè)依賴注入,但如果我們要使用在此我們是需要手動(dòng)去寫的,為了更為方面,我們需要增加這個(gè)providers 到app/config/app.php 中的 providers數(shù)組里面,只需要在最后加上AppRepositoriesBackendServiceProvider::class,
6:最后使用依賴注入更新你的controller當(dāng)我們完成上面的那些內(nèi)容之后,我們在Controller只需要簡單的調(diào)用方法代替之前的復(fù)雜的數(shù)據(jù)庫調(diào)用,如下面內(nèi)容:
HousesController.phphouse = $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")); } }這樣整個(gè)的流程就完成了。翻譯的不太好,請大家見諒,做了一些改動(dòng)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21092.html
摘要:什么是單元測試單元測試是對程序的最小單元進(jìn)行正確性檢驗(yàn)的測試工作。編寫第一個(gè)單元測試單元測試主要使用是測試框架類庫的擴(kuò)展庫,需要在中聲明測試依賴。目標(biāo)代碼這里以一個(gè)簡單的中的例子來說明如何寫單元測試。TL;DR: 本文主要面向單元測試新手,首先簡單介紹了什么是單元測試,為什么要寫單元測試,討論了一下 Android 項(xiàng)目中哪些代碼適合做單元測試,并以一個(gè)簡單例子演示了如何編寫屬于你的第一個(gè) ...
摘要:倉庫地址文檔地址清晰的目錄結(jié)構(gòu)只負(fù)責(zé)定義模型如模型關(guān)聯(lián)和等負(fù)責(zé)處理這個(gè)表相關(guān)的所有業(yè)務(wù)邏輯不只是注入相關(guān)的任何都可以注入代碼定位迅速只負(fù)責(zé)處理簡單的邏輯獲取轉(zhuǎn)發(fā)數(shù)據(jù)它應(yīng)該是簡潔干凈的所有的驗(yàn)證類所有的模型用戶相關(guān)的所有模型目錄結(jié)構(gòu)應(yīng)與一致 laravel-repository 倉庫地址Github Repository文檔地址 清晰的目錄結(jié)構(gòu) Models只負(fù)責(zé)定義模型(如:模型關(guān)聯(lián),...
閱讀 2492·2021-09-28 09:36
閱讀 1486·2021-09-22 15:33
閱讀 3636·2019-08-30 15:44
閱讀 1743·2019-08-29 13:14
閱讀 3132·2019-08-29 11:17
閱讀 1441·2019-08-29 11:03
閱讀 2905·2019-08-26 17:10
閱讀 681·2019-08-26 12:13