🎯 什麼情境該想到我

當你希望領域層「像操作一個記憶體集合那樣」取得與保存物件,而不必在領域邏輯裡摻進 SQL、ORM 或查詢細節時。

⚙️ 怎麼用(步驟 / 公式)

意圖:提供像集合的介面來存取聚合根,封裝背後的持久化細節。

  1. 只對聚合根設計 Repository,一個聚合對應一個 Repository(不替聚合內部物件設)。
  2. 介面用領域語彙描述:如 addfindByIdremove、依條件查詢,回傳的是完整、可用的聚合。
  3. 把資料庫、快取、查詢組裝等細節藏在實作裡,領域層只依賴介面。
  4. 需要複雜篩選時,讓 Repository 接受規格物件來表達查詢條件。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 不要替非聚合根的實體開 Repository,否則會繞過聚合根破壞邊界。
  • Repository 是領域概念,別讓它退化成到處是 CRUD 方法的資料存取層(DAO)。
  • 若只是單純建立物件、而非取回既有物件,那是工廠的職責,別混在一起。

🔗 相關工具