成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

最近很火的Laravel存儲(chǔ)庫(kù)模式(Repository)

下面由Laravel教程欄目帶大家推薦介紹關(guān)于Laravel存儲(chǔ)庫(kù)模式(Repository),希望對(duì)大家有所幫助!

最近很火的Laravel存儲(chǔ)庫(kù)模式(Repository)

  • 1. Laravel 中的存儲(chǔ)庫(kù)模式(Repository)
  • 2. 為什么要在 Laravel 中使用存儲(chǔ)庫(kù)模式(Repository)?

在大多數(shù) web 應(yīng)用程序中,訪問(wèn)數(shù)據(jù)庫(kù)占了代碼庫(kù)的很大一部分。為了避免在我們應(yīng)用程序邏輯上摻雜 SQL 查詢,我們依賴抽象,它隱藏了 PHP 方法背后的數(shù)據(jù)訪問(wèn)機(jī)制。

有幾種模式可以結(jié)構(gòu)化數(shù)據(jù)訪問(wèn),“Active Record” 和 “Repository” 是最著名的兩種。在這篇博文中,我將在 Laravel 框架 的背景下具體解釋它們。關(guān)于使用 Repository 模式的優(yōu)點(diǎn)和缺點(diǎn)的討論將在單獨(dú)的博客文章中進(jìn)行。

活動(dòng)記錄

默認(rèn)情況下,Laravel 使用 Active Record 模式。每個(gè) Laravel 程序員都直觀地使用它,因?yàn)樗窃诔橄蟮?Model 基類中實(shí)現(xiàn)的,而模型通常從它繼承而來(lái)。讓我們來(lái)看一個(gè)例子:

use IlluminateDatabaseEloquentModel;  /**  * @property int    $id  * @property string $first_name  * @property string $last_name  */ class Person extends Model { }  // --- 使用:  $person = new Person(); $person->first_name = 'Jack'; $person->last_name = 'Smith'; $person->save();

當(dāng)然,您可以讀寫(xiě)您在 Person 上創(chuàng)建的屬性。 但是要保存模型,您也可以 直接在模型上調(diào)用方法。 不需要另一個(gè)對(duì)象——模型已經(jīng)提供了訪問(wèn)相應(yīng)數(shù)據(jù)庫(kù)表的所有方法。

這意味著,域模型將您的自定義屬性和方法與同一類中的所有數(shù)據(jù)訪問(wèn)方法相結(jié)合。 第二部分是通過(guò)繼承 Model 來(lái)實(shí)現(xiàn)的。

要點(diǎn):

  • Active Record 結(jié)合 域模型與數(shù)據(jù)訪問(wèn)功能。
  • Laravel 使用 Active Record 模式并通過(guò) Model 類實(shí)現(xiàn)它。

Repository

Repository 模式是 Active Record 模式的替代方案。它還提供了處理數(shù)據(jù)訪問(wèn)的抽象。但更廣泛地說(shuō),它可以被視為域?qū)ο蟮母拍钚源鎯?chǔ)庫(kù)或集合。

與活動(dòng)記錄模式相反,存儲(chǔ)模式將數(shù)據(jù)庫(kù)訪問(wèn)與域模型分離。它提供了一個(gè)高級(jí)接口,你可以在其中創(chuàng)建、讀取、更新和刪除域模型,而不必考慮實(shí)際的底層數(shù)據(jù)存儲(chǔ)。

底層的存儲(chǔ)庫(kù)可以通過(guò)構(gòu)建和執(zhí)行 SQL 查詢?cè)L問(wèn)數(shù)據(jù)庫(kù),通過(guò) REST API 訪問(wèn)遠(yuǎn)程系統(tǒng),或者僅僅管理包含所有域模型的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。這對(duì)測(cè)試很有用。存儲(chǔ)庫(kù)模式關(guān)鍵部分是它為其余代碼提供的高級(jí)接口。

要點(diǎn):

  • 存儲(chǔ)庫(kù)表示域?qū)ο蟮母拍罴稀?/li>
  • 它只負(fù)責(zé)用高級(jí)接口封裝數(shù)據(jù)訪問(wèn)。
  • Laravel 沒(méi)有提供實(shí)現(xiàn)存儲(chǔ)庫(kù)模式的特定幫助程序

在 Laravel 中實(shí)現(xiàn) Repository 模式時(shí),我主要看到兩種變體。

變體1:特定方法

在第一個(gè)變體中,存儲(chǔ)庫(kù)方法是重點(diǎn)和特定的。名稱解釋了調(diào)用者獲得的內(nèi)容,用于參數(shù)化底層查詢的選項(xiàng)是有限的。

class InvoiceRepository {      public function findAllOverdue(Carbon $since, int $limit = 10): Collection {         return Invoice::where('overdue_since', '>=', $since)             ->limit($limit)             ->orderBy('overdue_since')             ->get();     }      public function findInvoicedToCompany(string $companyId): Collection {         return Invoice::where('company_id', $companyId)             ->orderByDesc('created_at')             ->get();     } }

這種方法的優(yōu)勢(shì)在于方法的表現(xiàn)力。閱讀代碼時(shí),很清楚從方法中期望什么以及如何調(diào)用它們。這會(huì)導(dǎo)致更少的錯(cuò)誤。 Repository 方法很容易測(cè)試,因?yàn)閰?shù)有限。

這種方法的一個(gè)缺點(diǎn)是,最終可能會(huì)在存儲(chǔ)庫(kù)中使用大量的方法。由于方法無(wú)法輕松重用,因此必須為新用例添加其他方法。

要點(diǎn):

  • 存儲(chǔ)模式可以通過(guò)提供特定方法的類來(lái)實(shí)現(xiàn)
  • 每個(gè)方法包裝一個(gè)查詢,只公開(kāi)必要的參數(shù)
  • 優(yōu)點(diǎn): 可讀性和可測(cè)試性
  • 缺點(diǎn): 缺乏靈活性和較低的可重用性

變式2: 一般方法

另一方面的方法是提供一般的方法。這導(dǎo)致了方法的減少。但是這些方法有一個(gè)很大的 API 曲面,因?yàn)槊總€(gè)方法都可以使用不同的參數(shù)組合來(lái)調(diào)用。

其中的關(guān)鍵問(wèn)題是參數(shù)表示。這種表示應(yīng)該引導(dǎo)調(diào)用方理解方法簽名并避免無(wú)效的輸入。為此,您可以引入一個(gè)特殊的類,例如使用 Query Object 模式。

但是我在實(shí)踐中經(jīng)常看到的是標(biāo)量參數(shù)和 PHP 數(shù)組的混合。調(diào)用方可以傳遞完全無(wú)效的輸入,僅類型數(shù)據(jù)并不能說(shuō)明要傳遞什么。但是如果使用得當(dāng),這種輕量級(jí)的方法可以避免更繁瑣的抽象。

class InvoiceRepository {      public function find(array $conditions, string $sortBy = 'id', string $sortOrder = 'asc', int $limit = 10): Collection {         return Invoice::where($conditions)             ->orderBy($sortBy, $sortOrder)             ->limit($limit)             ->get();     } }  // --- 使用:  $repo = new InvoiceRepository(); $repo->find(['overdue_since', '>=', $since], 'overdue_since', 'asc'); $repo->find(['company_id', '=', $companyId], 'created_at', 'asc', 100);

這種方法減輕了第一種方法的問(wèn)題:你可以得到更少的 Repository 方法,這些方法更靈活,并且可以更頻繁地重用。

從消極的方面看,Repository 變得更加難以測(cè)試,因?yàn)橛?/p>

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
欧美高潮抽搐喷水大叫| 秋霞一区二区三区| 欧美成人精品一区二区三区色欲| 欧美激情000ⅩXX同性| 人善交VIDEOS欧美3D| 色欲色香天天天综合网站免费 | 阿公抱着我边摸边吃奶视频| MM1313亚洲精品无码久久| 成人午夜福利视频| 国产精品亚洲А∨无码播放| 精品国产成人一区二区| 老太性开放BBWBBWBBW| 欧美午夜理伦三级在线观看| 色噜噜AV男人的天堂| 无码人妻精品一区二区三区9厂| 亚洲AV无码成人网站国产网站| 亚洲无人区码一二三码区别图片| 性欧美一区二区三区| 被公疯狂玩弄的漂亮人妻| 国产成人综合精品无码| 护士HD老师FREE性Ⅹ| 麻豆国产MV视频| 日本黑人乱偷人妻中文字幕| 无码视频一区二区三区| 亚洲色偷偷综合亚洲AV伊人| 97久久精品人人爽人人爽蜜臀| 吃瓜黑料视频永久地址| 国产精品无码一本二本三本色| 精品一线二线三线精华液| 欧美内射AAAAAAXXXXX| 婷婷97狠狠色综合| 亚洲中文字幕无码久久2017| А√最新版地址在线天堂| 国产精品秘 入口A级熟女| 久久精品中文字幕第一页| 人摸人人人澡人人超碰手机版| 午夜无码性爽快影院6080| 伊人久久大香线蕉AV最新午夜| 成年美女黄网站色大片免费看| 国产中文三级全黄| 女儿的朋友3完有限中字木瓜| 铜铜铜铜铜铜铜铜好大好硬| 一本到无码AV专区无码| 丁香五月激情综合色婷婷| 精品国产不卡一区二区三区| 人妻聚色窝窝人体www一区91| 小受叫床高潮娇喘嗯啊MP3| 性欧美玩弄性少妇HD| 国产成人精品综合久久久久性色| 久久久亚洲欧洲日产国码农村 | 啊灬啊灬啊灬快灬高潮少妇| 国内精品久久久久久久影院 | 精品久久久久久久无码| 日本人妻丰满大屁股a v| 亚洲精品四区麻豆文化传媒| となりの家のネツト在线| 精JAVAPARSER乱偷| 日韩AV一区在线观看| 亚洲色欲综合一区二区三区| 第一章少妇初尝云雨| 久久综合狠狠综合久久综合88| 少妇极品熟妇人妻200片| 伊人久久大香线蕉成人| 国产精品久久这里只有精品| 女警察受呻吟双腿大开H| 午夜福利1000集无码| 9色国产深夜内射| 狠狠色成人一区二区三区| 日本无套内射ⅩXXXX人妻在线| 亚洲无码一区二区三区| 国产 中文 制服丝袜 另类| 鲁鲁鲁爽爽爽在线视频观看| 午夜无码免费福利视频网址| Z〇ZOZ〇女人另类ZOZ〇| 久久精品这里热有精品| 午夜18禁自慰JK爆乳网站| HD老熟女BBN老淑女| 久久精品国产一区二区无码| 无码国产成人午夜电影在线观看| CHINESE叫床对白VIDEOS| 久久精品国产色蜜蜜麻豆| 无码毛片视频一区二区三区| JK制服白丝自慰出水| 久久久亚洲熟妇熟女中文字幕| 无码一区二区三区免费| 被C了一节课的林妙妙| 麻豆丰满少妇CHINESE| 亚洲成AV人片在线观看橙子| 丰满的继牳3中文字幕系列| 欧美精品一区二区三区人妻久久久| 亚洲另类欧美综合久久图片区| 国产成人午夜精品影院| 人妻 日韩精品 中文字幕| 影音先锋亚洲亚洲色图| 交换朋友夫妻客厅互换4韩国| 图片区小说区AV区| 波多野结衣AV电影在线观看| 免费人成在线观看网站免费观看 | 2021国产精品国产精华| 精品人妻一区二区三区四区| 新婚少妇下面真紧| 多毛丰满日本熟妇| 漂亮人妻被强中文字幕久久| 最新国产乱人伦偷精品免费网站| 久久99精品国产自在现线小黄鸭| 小妖精抬起臀嗯啊H军人| 国产AV剧情MD精品麻豆| 日韩AV一区二区三区| А√天堂资源中文在线官网| 欧美VPSWINDOWS极品| 在线观看片免费人成视频无码| 精品韩国亚洲AV无码不卡区| 性生生活色欲片性按摩| 国产精品无码AV无码| 色舞月亚洲综合一区二区| ンピースのエロス在线WWW| 欧美熟妇SEXFREE| 99久久精品免费看国产| 妺妺窝人体色WWW聚色窝仙踪| 亚洲午夜精品久久久久久人妖 | 亚洲国产日韩A在线播放| 国产亚洲AV综合人人澡精品| 无码精品人妻一区二区| 国产高潮视频在线观看| 玩爽少妇人妻系列无码| 国产精品55夜色66夜色| 天天躁夜夜躁狠狠躁2021A2| 国产69久久精品成人看| 熟女丝袜香蕉双人女高潮| 国产97色在线 | 国| 天天狠天天透天天爱综合| 国产成人精品综合久久久| 天堂M和天堂2M区别| 国产精品VA无码一区二区| 无码中文字幕AⅤ精品影 | XXXXX69HD护士19学生| 青草草97久热精品视频| 办公室欧美大尺寸SUV| 日本乱熟人妻精品中文字幕| 堕落女教师动漫全无修| 天堂8中文在线最新版在线| 国产精品久久国产精品99盘| 午夜理论片YY44880影院| 国精产品999永久中国有限公司| 亚洲JIZZJIZZ少妇| 久久精品国产一区二区三区肥胖| 伊人久久大香线蕉无码不卡| 免费A级毛片无码免费视频120| 999久久久国产精品消防器材| 漂亮人妻洗澡被公强啪啪| 大香伊蕉在人线国产69| 他用嘴巴含着我奶头吸怎么办 | 无码中文字幕AV免费放软件| 国精产品自偷自偷综合下载| 亚洲乱码一区AV春药高潮图片| 久久婷婷五月综合97色直播 | 亚洲AV永久精品无码| 精品无人区麻豆乱码无限制 | 两毫米的小洞你却稳稳命中| CAOPORN国产精品免费视频| 日日AV色欲香天天综合网| 国产精品无码无片在线观看| 亚洲丰满熟妇浓毛大隂户| 巨胸狂喷奶水WWW自慰网站| CHINESE国产AVVIDE| 四虎国产精品永久在线动漫| 国产又粗又黄又爽的大片| 亚洲综合久久一区二区| 欧美极品少妇XXXXⅩ高跟鞋| 丰满少妇AV无码区| 亚洲AV无码乱码国产麻豆穿越| 久久狼人大香伊蕉国产| а√在线中文网新版地址在线| 私人小影院久久久影院| 精品久久久BBBB人妻| 在线成人精品国产区免费| 人人爽人人澡人人人妻百度| 国产人久久人人人人爽| 又大又黄又粗又爽的免费视频| 强制高潮18XXXXHD日韩| 国产乱子夫妻XX黑人XYX真爽 | 久久精品国产精品国产一区| AV大片在线无码免费| 无码国产欧美日韩精品| 久久久久99精品成人片试看| 爱情岛论坛自拍亚洲品质极速福利 | 久久精品免费观看国产| YY6090青苹果影院| 新区乱码无人区二精东| 美国ZOOM人与ZOOM视频| 高校美女内射含羞草| 亚洲人成色777777精品音频| 欧洲免费无码视频在线| 国产亚洲精品在AV| 40岁大乳的熟妇在线观看| 污污污污污污网站| 老太奶性BBWBBW| 国产97在线 | 传媒有限公司| 亚洲色大18成人网站WWW在线| 人人玩人人添人人澡东莞|