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一区二区
潘金莲一级淫片aaaaaa播放1| 亚洲精品乱码久久久久久动漫| 99精品人妻少妇一区二区 | 日本精品免费视频| 国产主播自拍av| 手机在线国产视频| 三上悠亚久久精品| 亚洲一级片av| 国产精品无码av在线播放| the porn av| 国产3p露脸普通话对白| 亚洲无在线观看| 成人免费观看毛片| 日韩精品免费一区| 国产原创精品在线| 亚洲国产精品久久久久爰色欲| 特级黄色片视频| 激情综合网俺也去| 日韩一级性生活片| 法国空姐在线观看免费| 天天视频天天爽| 久久9精品区-无套内射无码| 中国女人做爰视频| 777一区二区| 天天操天天爱天天爽| 亚洲理论电影在线观看| 小早川怜子一区二区三区| 日本成人在线免费视频| 人人妻人人澡人人爽欧美一区双| 色一情一区二区三区| 国产第一页视频| 国产精品网站免费| 国产女教师bbwbbwbbw| 红桃视频 国产| 五月天婷婷亚洲| 中文字幕线观看| 男生操女生视频在线观看| 不卡av免费在线| 狠狠躁狠狠躁视频专区| av在线无限看| 嫩草视频免费在线观看| 日韩av片网站| 欧美成人黄色网址| 欧美丝袜在线观看| 国产乱码一区二区三区四区| 色片在线免费观看| 中文字幕久久av| www.午夜色| 日本福利视频在线观看| 99热久久这里只有精品| 久久亚洲中文字幕无码| 日韩av三级在线| 国产四区在线观看| 亚洲高潮无码久久| 欧美午夜精品理论片| 91av俱乐部| 日韩va在线观看| 特级黄色录像片| 妺妺窝人体色777777| 尤物av无码色av无码| av动漫免费看| 日本中文字幕片| 韩国中文字幕av| youjizz.com亚洲| 免费一级淫片aaa片毛片a级| 久久久久久久久久网| 精品视频在线观看一区| 国产日韩欧美大片| 日本黄色三级大片| 国产一线二线三线在线观看| 爱豆国产剧免费观看大全剧苏畅| ijzzijzzij亚洲大全| 女人和拘做爰正片视频| 永久免费的av网站| 国产精品一线二线三线| 日本久久久久久久久久久久| 久久观看最新视频| 另类小说第一页| 亚洲五码在线观看视频| 亚洲精品高清无码视频| 黄色录像特级片| 国产免费视频传媒| 男人添女荫道口图片| 永久免费的av网站| 国产精品秘入口18禁麻豆免会员 | 亚洲在线观看网站| 精品一区二区中文字幕| 蜜臀av.com| 在线视频日韩一区| 加勒比成人在线| 黄色影视在线观看| 91小视频在线播放| 黄色国产小视频| 日本十八禁视频无遮挡| 91麻豆天美传媒在线| 天天插天天操天天射| 99爱视频在线| 极品粉嫩国产18尤物| 日本一区二区三区四区五区六区| 538任你躁在线精品免费| 国模吧无码一区二区三区| 五月天六月丁香| 91丨九色丨蝌蚪| 亚洲三级视频网站| 成年人在线观看视频免费| 成人一级生活片| 精品人妻人人做人人爽| 污免费在线观看| 中文字幕中文在线| www,av在线| 成人手机视频在线| 热久久最新地址| 国产精品啪啪啪视频| 日本高清免费观看| 中文字幕一区二区三区四区五区人 | 日韩 欧美 高清| 水蜜桃色314在线观看| 艳母动漫在线观看| 在线观看18视频网站| 97精品国产97久久久久久粉红| 中文字幕成人免费视频| 涩多多在线观看| 国产经典久久久| 日韩一级性生活片| heyzo亚洲| 久久久久久久少妇| 一区二区三区视频在线观看免费| 黄色三级中文字幕| 亚洲 高清 成人 动漫| 波多野结衣作品集| 久久这里只精品| 一本二本三本亚洲码| bt天堂新版中文在线地址| 亚洲理论电影在线观看| 国内外成人激情免费视频| www.日本少妇| 天天色综合天天色| 日本高清xxxx| 成年人免费在线播放| 99国产精品久久久久久| 8x8x华人在线| 日韩毛片在线免费看| 中文字幕55页| 久色视频在线播放| 日本国产一级片| 久久99久久久久久| 亚洲精品综合在线观看| 日韩精品一区二区在线视频| 国产精品亚洲αv天堂无码| 日韩av一卡二卡三卡| 99热亚洲精品| 91在线第一页| 欧美 国产 综合| 国产精品无码乱伦| 久久久久久久久久久免费视频| 五月天av在线播放| 国模无码视频一区二区三区| 国产3p在线播放| 亚洲中文字幕无码中文字| 激情久久综合网| 免费观看中文字幕| 日本爱爱免费视频| 国产曰肥老太婆无遮挡| 一区二区三区网址| 2019日韩中文字幕mv| 亚洲 欧美 日韩 国产综合 在线| 亚洲免费黄色网| 日本男人操女人| 成人毛片视频网站| 久久免费视频2| 欧美成人免费高清视频| 成人av在线播放观看| 久久艹这里只有精品| 蜜臀av免费观看| 少妇高清精品毛片在线视频| 亚洲 欧美 综合 另类 中字| 精产国品一二三区| 岛国av免费在线| 久国产精品视频| 中文字幕成人在线视频| 男女无套免费视频网站动漫| 久久久999视频| 日韩在线综合网| 国产亚洲综合视频| 亚洲高潮无码久久| 免费在线精品视频| 欧美日韩一区二区三区电影| 日本黄网站免费| 污视频免费在线观看网站| 高潮一区二区三区| 97在线免费视频观看| 国内精品在线观看视频| 男人亚洲天堂网| 中文字幕第17页| 欧美狂野激情性xxxx在线观| 国产又大又硬又粗| 男女h黄动漫啪啪无遮挡软件| 乱熟女高潮一区二区在线| 北条麻妃在线观看| 四虎免费在线观看视频|