2011-04-20 85 views
0

我最近才知道懶惰,明確和熱切的加載,因爲我正在參加我的新項目的會議? 但是,我沒有明白爲什麼我們要研究這個? 我正在開發一個silverlight項目,其中也包括WCF RIA services.My導師正在解釋這些類型的加載。 任何人都可以幫助我,讓我可以研究他們,並向我的導師表明我在分配給我的任務中的嚴肅態度。懶惰,渴望,顯式加載意味着什麼?

+2

也許你可以開始展示*我們*你是多麼嚴重的通過格式化你的問題?(包括問號*在適當情況下*)。謝謝! – jv42 2011-04-20 11:04:30

+0

我一定會用,忘了趕。 – iti 2011-04-20 11:06:35

+0

以及我期待的答案不是評論。 – iti 2011-04-20 11:07:03

回答

0

假設您有一個CustomerOrder類,並且此類具有MyCustomer屬性和MySalesOrderLines屬性。 MyCustomer屬性包含對錶示訂單客戶的Customer類的引用,而MySalesOrderLines屬性包含對訂單訂單行集合的引用。在延遲加載中,這些屬性返回的數據庫記錄不會從數據庫中檢索,除非它們實際上是通過代碼調用的。即從數據庫中檢索Lazy-Loaded CustomerOrder實例時,僅當存在引用CustomerOrder.MyCustomer的代碼行時,纔是從數據庫中檢索的Customer實例。在預先加載時,在從數據庫檢索CustomerOrder記錄的同時,從數據庫中檢索這些屬性。

+0

你能解釋什麼是顯式加載?什麼是導航屬性恰好 – iti 2011-04-20 11:11:56

+0

上面提到的MyCustomer和MySalesOrderLines屬性是導航屬性。它們被用來「混淆其他數據元素」,或者暴露與當前數據元素相關的數據元素。顯式加載是當用戶在gui中執行一個引起這些屬性加載的動作時,加載由這些導航屬性公開的記錄的時間。就像一個「顯示訂單行」按鈕。然後執行您編寫的代碼以從數據庫中檢索用於填充MySalesOrderLines屬性公開的集合的記錄。 – 2011-04-20 11:31:15

0

延遲加載就像我們做的比這

+1

不是一個好例子。這可能是由於連接速度緩慢所致。 – abhilash 2011-04-20 11:24:33

0

哦之前不滾動圖像負載,因爲你提到的WCF RIA我想你的老闆在資源獲取方面談論這些模式。你也可以在實例化(對象),加載(共享庫),狀態(對象狀態初始化),評估(表達式不被評估,直到結果被使用)方面談論懶惰。同樣的事情可能適用於不同用例中的其他模式名稱。如果它關於資源管理,那麼......

這些是與對象獲取有關的模式,並且在[POSA3模式導向的軟件體系結構:資源管理模式,卷3] [1]中有詳細描述。

資源管理(您可以認爲對象,但資源是一個更好的術語)分爲四個階段:查找,獲取,生命週期和發佈。您要求的模式是資源獲取模式。

您成功查找的資源後,您有4個策略從獲取資源可供選擇:

  • 明確的收購,當資源請求時被完全收購;這是沒有模式,但一個正常的用例

  • 懶惰的獲取,當資源的獲取可以推遲在稍後的時間點,在對象屬性被訪問的時刻(你會最初返回一個代理對象) 。

  • 急於收購策略可以讓你做預測資源獲取(也就是你想立即獲取一組資源,你知道在初始資源的被請求

  • 部分收購戰略的生命週期將被要求讓你做上演採集;認爲大內存/ UKNOWN大小的物體,起初你會想獲取該對象僅部分