延遲載入
不包含所有您需要的資料,但知道如何取得的物件。
如需完整說明,請參閱 EAA 的 P 頁面 200
將資料從資料庫載入記憶體時,設計時務必方便,以便在載入感興趣的物件時,也能載入與其相關的物件。這讓使用物件的開發人員載入資料時更輕鬆,否則他們必須明確載入所有需要的物件。
但是,如果您將此推論到邏輯結論,就會到達載入一個物件可能會載入大量相關物件的地步,這會在實際上只會需要少數幾個物件時損害效能。
延遲載入會暫時中斷這個載入程序,在物件結構中留下一個標記,以便在需要資料時,只能在使用時載入。正如許多人所知,如果您對做事情感到懶惰,那麼當您發現根本不需要做這些事情時,您就贏了。
延遲載入有四個主要類型。延遲初始化使用特殊標記值(通常為 null)來表示欄位未載入。每次存取欄位時,都會檢查欄位是否有標記值,如果未載入,則載入。虛擬代理是一個與實際物件具有相同介面的物件。第一次呼叫其方法之一時,它會載入實際物件,然後委派。值持有者是一個具有 getValue 方法的物件。客戶端呼叫 getValue 來取得實際物件,第一次呼叫會觸發載入。幽靈是沒有任何資料的實際物件。第一次呼叫方法時,幽靈會將完整資料載入其欄位中。
這些方法的變化有些微妙,且有各種權衡。您也可以使用組合方法。本書包含完整的討論和範例。