在這些情況下,幫助決定何時使用DTO以及何時使用實體的一般想法是什麼?JPA實體和/ vs DTOs
- UI /服務器端java調用服務。它應該得到/發送實體還是DTO?
- 調用服務的Web服務。服務是否應接受實體或DTO?
我喜歡讀書,圍繞通過實體代碼:
- 簡單繞過,沒有需要映射到DTO的
- 不需要額外的類
- 關係到其他實體已經定義,所以不需要將相關的DTO合併成一個DTO
- 只是POJOs
但是有關DTO的觀點認爲映射到實體更安全,因爲它是一個契約,實體可以更改爲任何形式,並且DTO將保持不變。例如,如實體具有字段名稱,並且DTO也具有字段名稱。稍後,如果需求發生變化,數據庫表發生更改,實體也可以更改,將名稱更改爲firstName和lastName。但是DTO仍然會有一個字段名,即firstName + lastName。
所以這裏是使用的DTO的優點的列表:從接受的DTO
DTO的我能想到的是利弊代碼的觀點
- 向後兼容:
- 必須定義DTO類和映射(可能使用推土機)
- 程序員將ħ AVE分析時使用DTO和實體,我的意思傳遞DTO每一個方法是一個爛攤子
- 開銷實體轉化爲DTO的,反之亦然
- IM仍然不確定如何將一個一對多的關係映射它們。在JPA中,我們可以懶惰地初始化這個,但是當傳入DTO時,我應該初始化這個還是不是。簡而言之,DTO不具備延遲初始化代理,只包含值。
請分享你的想法..
謝謝!
這裏有來自不同地方的
pro dto一些報價:
實體類作爲DTO 的再利用顯得凌亂。 類的公開API(包括公開的 方法的註釋)不再明確定義 合同的目的,它是 介紹。該類將以 方法結束,該方法僅在 該類被用作DTO時使用,而 某些方法僅在使用 作爲實體時纔會被使用 。關注點不會被 乾淨地分開,事情會更加緊密地耦合到 。對我來說這是一個 更重要的設計考慮 然後試圖保存在 創建的類文件的數量。
絕對不是!
JPA實體映射到數據庫, 但它們不綁定到數據庫。 如果數據庫發生更改,則更改 映射,而不是對象。 對象保持不變。這就是整個點的 !
您能否澄清本節「您正在假設您的服務將始終由Java客戶端調用」?感謝您提出富有洞察力的答案。 – bertie 2011-03-23 03:43:41
如果我的實體沒有邏輯並且默認情況下很簡單,它們只有getter和setter,equals和toString,equals,hash,clone,set等基本方法會怎樣?在其他語言的Web服務中使用它們沒有任何問題。 – djmj 2012-07-18 00:14:07