關於專案中 Repository 層的思考

xinliang發表於2022-01-14

前言

關於專案中是否需要 Repository 層?這個問題,好像沒有肯定的答案,下面是我的思考分享給大家,不喜勿噴。

Repository 的定位

我理解 Repository 是個大倉庫,裡面可以有 MySQLRedisMongoDB … 等資料。

維護這一層的開發者,可以稱為 倉庫管理員 ,當使用者需要查詢資料的時候,需要告訴倉庫管理員,由倉庫管理員拿給他,至於倉庫管理員從哪拿的資料,使用者無需關係。

同理,當需要建立或更新資料的時候,也需要告訴倉庫管理員,由倉庫管理員進行運算元據。

總結:Repository 主要是封裝資料的查詢、建立、更新、刪除等邏輯,供使用者呼叫。

Repository 的實現

  • 可配置條件查詢
  • 可配置資料轉換
  • 可配置資料驗證

解釋下 “可配置資料轉換” :當我們需要返回隱私性欄位時,例:如手機號,如果使用者無資料許可權時,手機號欄位中間 4 位需要進行加 * 處理,還有處理返回的時間格式等。

如果你使用的是 Laravel 框架,可以參考下 andersao/l5-repository

Repository 的介面

Repository 層的介面可以理解為契約(可瞭解下 Laravel Contracts 目錄),它是受 Domain 驅動的,Repository 中定義的功能要體現 Domain 的意圖和約束。Domain 需要什麼我才提供什麼,不需要的我不會提供。

例如,介面名可以定義為 searchUsersByIdsearchUsersByName,不可以定義為 searchUsersByInfo,查詢的欄位也不建議設定為 * ,僅查詢需要的欄位進行返回。

什麼是 Domain?可以理解為領域層。

小結

使用 Repository 層有利有弊,弊端就是有些繁瑣,沒有 ORM 一把梭的順暢。當然優點也有很多,主要是後期的可維護性大大提高。

列舉一些優點:

  • 更換、升級 ORM 引擎時,不影響業務邏輯;
  • 便於單元測試,可用 Mock 物件代替實際的資料庫存取;

以上,希望對你能夠有所幫助。

推薦閱讀

本作品採用《CC 協議》,轉載必須註明作者和本文連結
日拱一卒

相關文章