2011-02-16 66 views
0

我們有一個傳統的Web服務體系結構。現在我有了使用EJB(EJB 3)進行新開發的奢望,並且我想避免DTO,因爲它創建了3個並行層。如果我將hibernate對象直接發送給客戶端,那麼關係會變成什麼樣子?創建一個分離的對象不會解決問題,因爲關聯的對象可能已經被其他地方獲取了。對這樣的hibernate對象進行序列化將強制整個圖形被清理。你使用什麼方法(DTO除外)來處理複雜的對象?DTO,如何避免它們?

+1

看到http://stackoverflow.com/questions/182323/how -to-serialize-hibernate-collections-適當的一些想法 – gcooney 2011-02-16 14:52:16

回答

2

對於遠程訪問(遠程EJB,Web服務等),我更喜歡DTO。它們不包含任何(代理)主鍵,只包含業務鍵,並提供客戶端視圖,而實體對服務是私有的,並且可以根據需要進行更改。

+0

你如何處理(父母子女)的關係?包含另一個DTO的DTO?如果你有幾個這樣的孩子關係呢?如果視圖不需要所有的子關係呢? – anergy 2011-02-16 17:49:52

+0

是的,當然,DTO可以根據需要形成對象圖並作爲實體的過濾視圖(省略客戶端不需要的字段)。 – Puce 2011-02-16 18:04:49

1

您可以使用DDD聚合模式:http://dddcommunity.org/node/88,根據我的經驗,它具有域模型+ DTO的好處,因爲整體被視爲一個單元。

而且通過我現在奢侈地使用EJB的我希望你的意思是...... EJB3因爲以前verions是非常痛苦的使用