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一区二区
日韩一级片播放| 国产免费又粗又猛又爽| 交换做爰国语对白| 中文字幕22页| 久久久久xxxx| 亚洲一区二区福利视频| 国产精品区在线| 天天操天天爱天天爽| 又色又爽又高潮免费视频国产| 黄色www网站| 97av视频在线观看| 99视频在线视频| 国产成人在线综合| 91视频成人免费| 免费在线黄网站| 久久国产亚洲精品无码| 亚洲中文字幕久久精品无码喷水| 人人爽人人av| 青娱乐国产精品视频| 免费看欧美黑人毛片| 欧美a在线视频| 日韩av卡一卡二| 国产黄色激情视频| 毛片av免费在线观看| 九九热免费在线观看| 日韩在线视频在线| 国产视频一区二区三区在线播放| 夜夜夜夜夜夜操| 精品久久久久久无码中文野结衣| jizzjizzxxxx| 国产精品久久久久久9999| 久久国产午夜精品理论片最新版本| 能在线观看的av| 久久久久久久久久毛片| 免费一级淫片aaa片毛片a级| 青青草av网站| 久久国产精品免费观看| 国产成人av影视| 丁香色欲久久久久久综合网| 国产精品69页| 国产精品久久..4399| 手机av在线免费| 大陆极品少妇内射aaaaa| 欧美日韩理论片| 成人羞羞国产免费网站| 色爽爽爽爽爽爽爽爽| 欧美一级裸体视频| 欧美久久在线观看| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 女人另类性混交zo| 六月婷婷激情综合| 三级黄色片免费观看| 91视频免费版污| 日韩精品 欧美| av日韩在线看| 午夜精品免费看| 国产一级做a爰片久久| 久激情内射婷内射蜜桃| www.一区二区.com| 欧美精品一区二区性色a+v| 成人综合久久网| av亚洲天堂网| 天天干天天玩天天操| 好男人www社区| 成人性生生活性生交12| 成人性做爰aaa片免费看不忠| 九九爱精品视频| 欧美成人免费在线观看视频| 国产精品69久久久| 国产亚洲黄色片| 国产精品后入内射日本在线观看| 99热久久这里只有精品| 无码人妻少妇伦在线电影| 欧美日韩福利在线| 日本一区二区黄色| 动漫av免费观看| 911福利视频| 一级一片免费播放| 妞干网视频在线观看| 成人在线观看你懂的| 久久精品免费一区二区| 在线视频日韩一区 | 亚洲精品视频三区| 99亚洲精品视频| 国产九色porny| 欧美黄网站在线观看| 亚洲免费看av| 懂色av粉嫩av蜜臀av| 亚洲自偷自拍熟女另类| 欧美一级特黄a| 激情视频小说图片| 啊啊啊一区二区| 国内自拍第二页| 国产成人永久免费视频| 丁香婷婷激情网| 最新黄色av网站| 97视频在线免费播放| 韩国一区二区在线播放| 欧美午夜小视频| 欧美视频国产视频| 免费看又黄又无码的网站| 手机av在线免费| 国产午夜福利在线播放| 亚洲va在线va天堂va偷拍| 日本欧美视频在线观看| 亚洲精品自拍网| 精品久久久久久久久久中文字幕 | 一级黄色高清视频| 国产高清精品在线观看| 日本美女久久久| 性刺激的欧美三级视频| 国产黄色激情视频| 日本高清久久久| 男女av免费观看| 免费看毛片的网址| 韩国黄色一级大片| 国产乱码一区二区三区四区| 丝袜老师办公室里做好紧好爽| 91香蕉视频免费看| www.成人黄色| 牛夜精品久久久久久久| 欧美日韩精品在线一区二区| 一区二区三区四区免费观看| 中国黄色片一级| 岛国av在线免费| 亚洲第一狼人区| 国产精品无码av无码| 自慰无码一区二区三区| 国产96在线 | 亚洲| 日韩精品久久一区二区| 国产精品jizz在线观看老狼| 色18美女社区| 99精品视频国产| 超碰在线资源站| 久久免费看毛片| 一级全黄肉体裸体全过程| 亚洲在线观看网站| avove在线观看| 国产精品三级一区二区| 欧美精品自拍视频| 国产精品wwwww| 奇米影音第四色| 香蕉视频色在线观看| 亚洲国产精品女人| 免费特级黄色片| 亚洲熟妇av一区二区三区| 天天操天天爽天天射| 99日在线视频| 最近免费观看高清韩国日本大全| 丰满人妻一区二区三区53号| 久久综合久久网| www.日本xxxx| 乱子伦一区二区| 久久精品免费一区二区| 奇米视频888| 97av中文字幕| 成年人网站大全| 亚洲国产精品影视| 国产91xxx| 免费网站在线观看黄| 成人av在线播放观看| 国产a级片免费观看| 国产又粗又爽又黄的视频| 亚洲精品久久久久久久蜜桃臀| 日本精品免费在线观看| 在线观看免费视频污| 久久精品视频16| 亚洲制服中文字幕| av片中文字幕| 污污污污污污www网站免费| 999精品视频在线| av在线观看地址| 在线免费视频一区| 黄色激情在线视频| 日韩av片免费观看| 日本精品www| 日韩五码在线观看| 黄色小视频大全| 亚洲小视频网站| 欧美精品一区二区三区免费播放| 大地资源第二页在线观看高清版| 国产午夜福利视频在线观看| 老司机午夜网站| 亚洲欧美天堂在线| 欧美男女交配视频| 免费裸体美女网站| 内射国产内射夫妻免费频道| 成人短视频在线看| 激情成人在线观看| 91亚洲精品久久久蜜桃借种| 国产精彩免费视频| 国产精品50p| 日韩精品xxxx| 青青青青草视频| 亚洲 欧美 综合 另类 中字| 色一情一乱一乱一区91| 成年人免费观看的视频| 在线观看中文av| 91视频成人免费| 粉嫩av一区二区三区天美传媒|