2009-11-06 51 views
1

從DB獲取對象時,是否應該加載對象的屬性?似乎有這些方法。從數據庫填充對象 - 你停在哪裏?

  • 創建格式良好的完全加載的對象。

Pro:無需檢查屬性是否已加載;它有。通過它,不要擔心對象的部分不在那裏。

缺點:你在哪裏停下來?如果一個對象有一個對象,並且該對象有一個對象,並且該對象有40個對象作爲屬性,等等......您是否加載了整個數據庫?或者,你是否在BLL中決定什麼構成格式良好的對象,然後加載這些屬性?

  • 請勿加載任何其他對象的屬性。

Pro:快速,無需加載不必要的屬性。

缺點:代碼必須經常寫檢查,如果屬性被填充。

  • 延遲加載:只在第一次使用時加載屬性。

Pro/Con:不知道該怎麼說這種方法。這看起來直覺上是錯誤的。

難道還有其他的方法嗎?什麼方法是最好的?

最後,什麼屬性,可以爲空?例如,一輛汽車可能沒有一個PreviousOwner對象。你把它設置爲空嗎?一個空的PreviousOwner對象?那財產屬於另一類嗎?

回答

1

有沒有簡單的答案給你的問題,因爲它取決於你想達到什麼。

看起來像您期望從數據庫中加載或多或少完整的對象圖(即多個對象類型和存儲在數據庫中的對象本身之間的關係)。

如果是這種情況,我會考慮使用Object Relationship Mapper,這在我的選擇語言中很方便。

至於有多少的對象圖被加載,Apple CoreData系統採用的模型是尚未檢索的對象被標記爲有故障(他們稱之爲「故障」 - 它在Limiting the Size of the Object Graph: Faulting中描述過。關於你自己描述的懶加載概念。