成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院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)
中文字幕无码AV不卡一区 | 无码AV波多野结衣久久| 无码AV中文字幕久久专区| 亚洲AV福利天堂在线观看| 亚洲精品成人无码中文毛片不卡 | 老熟女媾交系列群| 欧美精产国品一二三产品工艺| 人妻丝袜AV先锋影音先| 天天干天天射天天操| 亚洲ΑV无码一区二区三区四区| 一本久道中文无码字幕AV| 无码H肉男男在线观看免费| 黑料不打烊隐藏入口GITHUB| 精产国品一二三产区9977| 精品国产国偷自产在线观看| 最新的国产成人精品2022| HEYZO高清中文字幕在线| FIREEXⅩ性欧美HD护士| 亚洲综合欧美色五月俺也去| 欧美另类精品黑人巨大| 精产国品一二三产品区别在哪| 国产又色又爽又刺激视频| china熟女熟妇乱老女人百度| 婷婷综合另类小说色区| 孽火(硬汉)今又| 国产Ⅴ亚洲V天堂A无码| 狠狠色噜噜狠狠狠狠色综合久| 亚洲VA无码专区国产乱码| 免费看久久妇女高潮A| YY111111少妇无码理论片| 亚洲国产精品成人一区二区在线 | 欧美性生交XXXXX久久久| 久久精品国产自在天天线| 精品无码国产自产拍在线观看蜜 | 麻豆精产国品一二三产区区| 办公室的交易HD中文字幕| 亚洲大成色WWW永久泡芙| 日韩欧美视频一区二区| 亚洲成AV人在线观看成年美女| 国产人妻麻豆蜜桃色精品电影| 18禁美女黄网站色大片免费看| 亚洲色偷偷综合亚洲AV色欲| 色综合久久久久久久久五月| 97大学生情侣真实露脸在线| 亚洲VA久久久噜噜噜久久天堂| 欧美成人精品一区二区| 久久精品国产精油按摩| 成人国产精品一区二区免费看| 亚洲国产成人精品无码区在线网站| 无人区一码二码三码四码区别在哪| 斯诺克直播在线观看高清直播| 女主播屁G裸露W身曝光| 久久99国产精品久久99软件| 国产成人无码国产亚洲| 成人片黄网站色大片免费观看AP | 野花高清完整版免费观看视频大全 | 亚洲一级无码av毛片www| 国产精品爽爽VA在线观看| 国产在线孕妇孕交| 人妻丰满熟妇av无码区乱| 亚洲AV无码一区二区三区在线| MM1313亚洲精品无码久久| 狠狠躁夜夜躁人人爽天天不卡软件| 强奷秘书吸乳免费观看| 亚洲男人的天堂在线播放 | 一二三四免费BD高清视频| 国产AV夜夜欢一区二区三区| 乱子伦农村XXXXBBB| 亚洲ⅤA中文字幕无码| 波多野结衣在线观看AV| 久久久久久精品免费看SSS| 特大巨黑吊XXXX高潮| 97超碰中文字幕久久精品| 娇妻卧室含辱迎接领导是哪部电影 | 亚洲精品有码在线观看| 亚洲一区二区三区在线观看网站| 69成人免费视频无码专区| FREE紧VIDEOXX粗又长| 久久国产精品亚洲艾草网| 无码被窝影院午夜看片爽爽JK| CAOPOREN超碰| 男生J桶进女人P又色又爽又黄| 亚洲AV无码AV制服另类专区| 二三四五六七无产乱码| 免费稀缺拗女一区二区| 亚洲热妇无码Av在线播放| 国产精品高潮露脸在线观看| 人人妻人人爽日日人人| 祖母和おばあちゃん的区别| 精品一区二区三区无码免费直播| 国产乱子伦60女人的皮视频 | 亚洲色偷偷综合亚洲AV伊人蜜桃| 公天天吃我奶躁我的在线观看| 欧美人妇做爰XXXⅩ性高| 亚洲日韩中文字幕无码一区| 国产乱沈阳女人高潮乱叫老| 日日噜噜噜夜夜爽爽狠狠视频| 性妇WBBBB搡BBBB嗓1| 日本中文字幕一区二区高清在线| 一面亲上边一面膜下边56| 国内精品久久久久久久小说| 爽到高潮无码视频在线观看| 成 年 人 黄 色 大 片大 全| 激情亚洲一区国产精品| 玩弄CHANEL妇熟女| 成 人 免 费 黄 色 网站无| 妺妺窝人体色77777777| 亚洲综合一区二区三区无码| 精品国产乱码久久久久久郑州公司| 午夜无遮挡男女啪啪免费软件| 公侵犯玩弄漂亮人妻优| 日韩爆乳一区二区无码| 宝贝腿开大点我添添公视频免| 欧美国产成人久久精品| 18禁无遮挡无码国产免费网站 | 粉嫩小泬无遮挡久久久久久| 猫咪WWW免费人成网站| 亚洲欧好州第一的日产SUV| 国产人久久人人人人爽| 无码口爆内射颜射后入| 国产精华液一二三区别| 无码AV蜜臀AⅤ色欲在线| 国产成人精品亚洲日本专区61| 色综合色狠狠天天综合色| 粗大黑人巨茎大战欧美成人免费看| 日本熟妇XXⅩ浓密黑毛| 超清纯白嫩大学生无码网站| 人妻丰满熟妇av无码区乱| ンピースのエロス在线WWW| 人妻系列无码专区久久五月天| 锕锕锕锕锕锕好污网站大全| 日本乱码卡一卡新区入口| 成人AV片在线观看免费| 色天使综合婷婷国产日韩AV| 疯狂做受ⅩⅩⅩⅩ高潮高清视频| 天堂中文АⅤ在线| 国产精品丝袜一区二区三区| 亚洲 欧美 变态 另类 综合| 韩漫无羞遮无删减漫免费 | 精产国品一二三产区区别在哪儿呢 | 亚洲AV色香蕉一区二区三区| 国语做受对白XXXXmp4| 亚洲国产精品无码中文字APP| 久久97人人超人人超碰超国产 | 宝贝腿抬高点让我爽一点麻豆| 日韩欧美群交P内射捆绑| 国产A三级久久精品| 香蕉成人伊视频在线观看| 饥渴人妻被快递员玩弄视频| 亚洲性无码AV在线DVD| 蜜桃av一区二区三区| GAYFUCKⅩⅩⅩⅩHD警察| 日韩精品无码一区二区三区免费| 国产成人欧美精品视频APP| 亚洲AV成人片色在线观看蜜桃| 精品日产A一卡2卡三卡4卡乱| 在线观看亚洲AV日韩A∨| 欧美日韩国产综合草草| 粉嫩av.con| 亚洲 日本 欧美 中文幕| 精品亚洲国产成人AV在线小说| 在教室伦流澡到高潮HGL动漫 | 公交车被CAO得合不拢腿视频| 性少妇JEALOUSVUE片| 久久久精品国产SM最大网站| 8V蜜桃网最新电影| 少妇┅┅快┅┅用力| 国内精品国产成人国产三级| 伊人久久五月丁香综合中文亚洲 | 丰满熟妇性ⅩXXOOO69| 亚洲AV熟女高潮30P| 老熟妇高潮一区二区高清视频| 被陌生人在地铁揉到高潮| 小妖精太湿太紧了拔不出| 久久久久亚洲AV无码专区首JN| JAVAPARSER乱偷| 西方37大但人文艺术任汾A级| 久久久亚洲AV波多野结衣| 被老汉耸动呻吟双性美人| 午夜A级理论片在线播放717| 久久久久精品一区中文字幕| 啊轻点灬大巴太粗太长视频| 性无码专区一色吊丝中文字幕 | 又大又粗又爽又黄的少妇毛片| 欧美人妖XXXX做受| 国产白嫩护士在线播放| 亚洲日本乱码在线观看| 人妻丰满熟妇AV无码区免| 国产麻豆精品久久一二三| 在线观看免费A∨网站| 天堂资源官网在线资源| 久久亚洲私人国产精品| 短篇公交车高H肉辣全集目录| 亚洲国产一区二区三区亚瑟| 欧美日韩午夜群交多人轮换| 国产午夜成人AV在线播放| 中字无码AV电影在线观看网站| 无码被窝影院午夜看片爽爽JK| 免费A级毛片18以上观看精品| 国产精品V欧美精品∨日韩|