2013-08-28 71 views
0

Request的具體實現RequestFactoryGWT)的細節對我來說有點不清楚。看到這裏爲the official documentationRequestFactory的實體關係

問題1:

當查詢服務器,RequestFactory確實對象圖不會自動 填入關係。爲此,請在請求上使用with() 方法,並將相關屬性名稱指定爲String。

這是否意味着,如果Entity在服務器使用Lazy Fetching,返回EntityProxy將所有與指定的請求的對象()?實例化對象服務器端的整個對象圖似乎有點奇怪,只向客戶端發送一小段對象。

問題2:

是否req.with( 「富」)和( 「富」);和req.with一樣(「foo」); ?

問題3:

是否req.with( 「富」)和( 「條」);和req.with一樣(「foo」,「bar」); ?

注意:我很難在源代碼中找到with()的實現細節,並且API也不幫我。

回答

1

問題1:

這可能取決於你的服務器端實行。 with調用將只確保在RF調用返回給客戶端之前不久調用相應的獲取者(getFoo())。

這就是爲什麼你還必須確保使用的模式OpenSessionInView,否則你可能會遇到NullPointeterException秒。

問題2:

我猜Request<T>實現生成器模式。 最終結果將是一樣的。 但是我不確定getter()將被調用兩次,或者with方法將檢查是否已經請求了吸氣劑。

問題3:

是的,它是相同的。

作爲旁註。您可以使用req.with("foo.bar")。 在後端,這將導致getFoo().getBar()調用。

+0

關於第一個問題,考慮後端運行NoSQL數據庫而沒有熱切的加載功能的情況,例如:MongoDB。人們可以很容易地將對象圖存儲在那裏,並快速獲得一個java對象中的完整圖。如果客戶端在沒有任何with()調用的情況下(通過代理)請求該對象,我是否會在客戶端擁有完整的對象圖形?如果理解正確,將會因爲不需要額外的獲取者來填寫對象圖。 – Vjeetje

+0

也可能有人可以指向Request的實現文檔?與http://www.gwtproject.org/javadoc/latest/com/google/web/bindery/requestfactory/shared/class-use/Request.html它似乎沒有 – Vjeetje

+1

@Ümit:對於Q2和Q3,答案是的,_property references_是一個'Set',所以不會有重複(並且不會在服務器端重複調用getter) –