gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

淺析Laravel中存儲庫模式(Repository)的優點

為什么要在 Laravel 中使用存儲庫模式(Repository)?下面本篇文章給大家介紹一下使用存儲庫模式的優點,希望對大家有所幫助!

淺析Laravel中存儲庫模式(Repository)的優點

Laravel 9 保姆級視頻教程,想學不會都難!進入學習

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

在之前的文章中,我解釋了什么是存儲庫模式,它與Active Record模式有何不同,以及如何在Laravel中實現它。現在我想深入了解一下為什么應該使用存儲庫模式。

我在上一篇文章的評論中注意到,Repository模式在Laravel社區中是一個有爭議的話題。有些人認為沒有理由使用它,并堅持使用內置的Active Record模式。其他人則傾向于使用其他方法將數據訪問從邏輯域中分離出來。請注意,我尊重這些意見,并將在接下來的博客文章中專門討論此主題。

有了這個免責聲明,讓我們來了解一下使用存儲庫模式的優點。

單一責任原則

單一責任原則是主要鑒別器來區分Active Record模式和存儲庫模式。模型類已經保存數據并提供域對象的方法。當使用Active Record模式時,數據訪問是額外引入的責任。這是我想在以下示例中說明的東西:

/**  * @property string $first_name  * @property int    $company_id  */ class Employee extends Model {}  $jack = new Employee(); $jack->first_name = 'Jack'; $jack->company_id = $twitterId; $jack->save();
登錄后復制

雖然域模型和數據訪問技術的職責混合,但它直觀上看還說得過去。在我們的應用程序中,員工必須以某種方式存儲在數據庫中,因此為什么不調用對象上的save()。單個對象被轉化成單個數據行并存儲。

但是,讓我們更進一步,看看我們還能對員工做些什么:

$jack->where('first_name', 'John')->firstOrFail()->delete(); $competition = $jack->where('company_id', $facebookId)->get();
登錄后復制

現在,它變得不直觀,甚至違背了我們的域模型。 為什么 Jack 會突然刪除另一個甚至可能在不同公司工作的員工? 或者他為什么能把 Facebook 的員工拉過來?

當然,這個例子是人為設計的,但它仍然顯示了 Active Record 模式如何不允許有意的域模型。 員工與所有員工列表之間的界限變得模糊。 您始終必須考慮該員工是被用作實際員工還是作為訪問其他員工的機制。

倉庫模式通過強制執行這個基本分區來解決這個問題。它的唯一用途是標識域對象的合集,而不是域對象的本身。

要點:

  • 通過將所有域對象的集合與單個域對象分離, 倉庫模式體現了單一責任原則

不要重復自己 (DRY)

一些項目將數據庫查詢灑遍了整個項目。下面是一個例子,我們從數據庫中獲取列表,并在 Blade 視圖中顯示他們。

class InvoiceController {      public function index(): View {         return view('invoices.index', [             'invoices' => Invoice::where('overdue_since', '>=', Carbon::now())                 ->orderBy('overdue_since')                 ->paginate()         ]);     } }
登錄后復制

當這樣的查詢遍得更加復雜并且在多個地方使用時,考慮將其提取到 Repository 方法中。

存儲庫模式通過將重復查詢打包到表達方法中來幫助減少重復查詢。如果必須調整查詢,只需更改一次即可。

class InvoiceController {      public __construct(private InvoiceRepository $repo) {}      public function index(): View {         return view('invoices.index', [             'invoices' => $repo->paginateOverdueInvoices()         ]);     } }
登錄后復制

現在查詢只實現一次,可以單獨測試并在其他地方使用。此外,單一責任原則再次發揮作用,因為控制器不負責獲取數據,而只負責處理HTTP請求和返回響應。

Takeaway:

  • ? 存儲庫模式有助于減少重復查詢

依賴反轉

解釋 Dependency Inversion Principle 值得發表自己的博客文章。我只是想說明存儲庫可以啟用依賴項反轉。

在對組件進行分層時,通常較高級別的組件依賴于較低級別的組件。 例如,控制器將依賴模型類從數據庫中獲取數據:

class InvoiceController {     public function index(int $companyId): View {         return view(             'invoices.index',             ['invoices' => Invoice::where('company_id', $companyId)->get()]         );     } }
登錄后復制

依賴關系是自上而下的,緊密耦合的。 InvoiceController 取決于具體的 Invoice 類。 很難將這兩個類解耦,例如單獨測試它們或替換存儲機制。 通過引入 Repository 接口,我們可以實現依賴倒置:

interface InvoiceRepository {     public function findByCompanyId($companyId): Collection; }  class InvoiceController {     public function __construct(private InvoiceRepository $repo) {}      public function index(int $companyId): View {         return view(             'invoices.index',             ['invoices' => $this->repo->findByCompanyId($companyId)]         );     } }  class EloquentInvoiceRepository implements InvoiceRepository {     public function findByCompanyId($companyId): Collection {         // 使用 Eloquent 查詢構造器實現該方法     } }
登錄后復制

Controller 現在只依賴于 Repository 接口, 和 Repository 實現一樣. 這兩個類現在只依賴于一個抽象, 從而減少耦合. 正如我將在下一節中解釋的那樣,這會帶來

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
玖玖爱视频在线| 久久久成人精品一区二区三区 | 欧美牲交a欧美牲交aⅴ免费真| 一区二区免费av| 国产aaaaa毛片| 欧美二区在线视频| 日韩视频免费播放| 国产精品无码免费专区午夜| 日本黄色a视频| 亚洲图片 自拍偷拍| 成年人黄色在线观看| 日韩视频在线观看一区二区三区| 中文字幕永久视频| 欧美美女一级片| 超碰91在线播放| 深夜做爰性大片蜜桃| 一道本在线观看视频| 4444在线观看| 欧美大片在线播放| 国产真实乱子伦| 中文字幕第88页| 99精品视频国产| 日韩一级片一区二区| 日本香蕉视频在线观看| 日日摸日日碰夜夜爽无码| 国产成人精品视频免费看| 日韩一级免费在线观看| 超碰成人在线免费观看| 亚洲天堂av一区二区三区| www.av蜜桃| 超碰超碰超碰超碰超碰| 男人j进女人j| 国产xxxx振车| 日本精品久久久久久久久久| 蜜臀av免费观看| 妞干网在线免费视频| 中文字幕天天干| www.99在线| 中文字幕网av| 91社在线播放| 男女超爽视频免费播放| 欧美视频免费看欧美视频| 久久久久久久久久网| 国产91在线免费| 亚洲综合在线网站| 中文字幕一区二区在线观看视频| 天天色天天综合网| 中文字幕色呦呦| 成人小视频在线看| 爱豆国产剧免费观看大全剧苏畅| 国产免费色视频| 欧美 日韩 国产在线观看| 蜜桃免费在线视频| 日产精品久久久久久久蜜臀| 欧美日韩第二页| 人妻有码中文字幕| 三级黄色片免费观看| 99爱视频在线| aaa免费在线观看| 爱福利视频一区二区| 天天操狠狠操夜夜操| 男人日女人视频网站| 免费看涩涩视频| 六月婷婷在线视频| 天天做天天干天天操| 欧美一区二区三区爽大粗免费| 亚洲36d大奶网| 女人扒开屁股爽桶30分钟| 国产资源中文字幕| 精品免费国产一区二区| 伊人再见免费在线观看高清版| caopor在线视频| 日本国产在线播放| 午夜探花在线观看| 在线观看国产中文字幕| 狠狠噜天天噜日日噜| 免费日韩视频在线观看| 国产无色aaa| 天天天干夜夜夜操| 特级西西444| 一级做a爱视频| 亚洲欧美日韩一级| 亚洲精品怡红院| 久久久久久久久久久免费视频| 男人天堂新网址| 亚洲综合伊人久久| 中文字幕一区二区在线观看视频 | 成人一对一视频| 日本精品福利视频| 看一级黄色录像| 亚洲激情免费视频| 男人天堂网站在线| 成人高清dvd| avav在线播放| 欧美精品一区二区三区三州| 人妻夜夜添夜夜无码av| 欧美 日韩 亚洲 一区| 国产日韩欧美精品在线观看| 日本aa在线观看| 人人干视频在线| 久久亚洲中文字幕无码| 国产系列第一页| 日本丰满少妇黄大片在线观看| 亚洲小说欧美另类激情| 久久这里只有精品23| 黄色动漫网站入口| wwww.国产| 亚洲精品中文字幕乱码无线| 51xx午夜影福利| 精品无码国产一区二区三区av| 青草青青在线视频| 欧美黄色性生活| 欧美日韩视频免费在线观看| 99久久久精品视频| 欧美黄网站在线观看| 黄色手机在线视频| 国产又爽又黄ai换脸| 欧美三级在线观看视频| 亚洲免费一级视频| www国产无套内射com| 日本黄色片一级片| 分分操这里只有精品| av中文字幕网址| 日本丰满少妇xxxx| 亚洲精品中文字幕乱码无线| 欧美a级免费视频| 在线免费视频a| 丁香六月激情婷婷| www.色就是色.com| 国产高清av在线播放| 99精品999| 免费成人午夜视频| 日韩不卡视频一区二区| 无码人妻精品一区二区三区66| 潘金莲一级淫片aaaaa免费看| 欧美 丝袜 自拍 制服 另类| 国产又粗又猛大又黄又爽| 91免费视频网站在线观看| 激情成人在线观看| 男女视频网站在线观看| 一级片视频免费观看| 日韩亚洲欧美视频| 97超碰在线视| 九九九久久久久久久| 中文久久久久久| 18禁男女爽爽爽午夜网站免费| 欧美少妇一区二区三区| 中文字幕第一页在线视频| 色诱视频在线观看| 日韩免费毛片视频| 黑森林福利视频导航| 欧美 国产 日本| 777777av| 丰满人妻中伦妇伦精品app| 国产女人18毛片| 五月天视频在线观看| 成人午夜激情av| 冲田杏梨av在线| www.com操| 中文字幕 欧美日韩| 免费成人黄色大片| 午夜一级免费视频| 99热都是精品| 91午夜在线观看| 日韩在线综合网| 91在线视频观看免费| 久久久久久三级| 欧美在线aaa| 欧美色图色综合| 日本xxx免费| 日韩精品一区二区三区色欲av| 无码人妻丰满熟妇区毛片18| 成人小视频在线看| 日韩在线一区视频| 天天综合五月天| 无罩大乳的熟妇正在播放| 妞干网在线免费视频| 三级a三级三级三级a十八发禁止| 五月天丁香花婷婷| 日本男女交配视频| 国产无套内射久久久国产| 成年人三级黄色片| 国产资源第一页| 黑森林福利视频导航| 亚洲77777| 国产3p露脸普通话对白| 妓院一钑片免看黄大片| 欧美 国产 精品| 亚洲爆乳无码专区| 天天在线免费视频| 欧美激情国产精品日韩| 日韩av福利在线观看| www..com日韩| 超碰在线免费观看97| 日韩精品无码一区二区三区免费| 深夜做爰性大片蜜桃| 国产福利一区视频| 久久99久久99精品| 日本丰满大乳奶| 欧美日韩精品区别|