🎯 什麼情境該想到我
當你「載入一個物件時不想連帶把所有關聯資料都拉進來,等真正用到才去查」的時候。
⚙️ 怎麼用(步驟 / 公式)
意圖:物件先不載入其關聯的資料,但保留「稍後如何取得」的資訊,等到真正被存取時才去資料庫載入。
做法要點:
- 四種常見做法:Lazy Initialization(存取時檢查並載入)、Virtual Proxy(假物件占位,用到才實體化)、Value Holder(包一層持有者)、Ghost(先建空殼,觸碰時補齊)。
- 避免一次把整張物件關聯網全部拉出,減少不必要的查詢與記憶體。
- 常見於 ORM 的關聯載入策略。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 用不好會造成 N+1 查詢(迴圈中反覆觸發載入),反而更慢。
- 若明知會用到整批資料,改用及早載入(eager)更划算。
- 代理 / 空殼會讓除錯與相等判斷較不直覺。
🔗 相關工具
- 資料對應器 Data Mapper(常搭配實作延遲載入)
- 外鍵對應 Foreign Key Mapping(關聯載入時機的取捨)
- 企業應用架構模式