2012-09-04 145 views
3

我有一個JAX-RS服務(我使用澤西島),現在我必須做客戶端。我想知道你們是如何處理模型對象的。 爲了在客戶端和服務器之間共享模型,您是否將模型類放在不同的jar中?你總是使用DTO,或者你有時(總是?)返回jpa實體。JAX-RS:模型和最佳實踐

我必須使用的服務(我沒有創建它,但我可以修改它),通常會返回實體,所以我想知道如果我將這些類外化,是不是有點奇怪。

您認爲如何?你有什麼用途?

回答

3

這取決於項目的複雜性和目的使用JAX-RS在它:

  • 非常簡單的項目,我不會爲一個項目創建一個更DTO層任何
  • 像您的似乎使用JAX-RS只是將數據從java客戶端移動到java服務器我不會創建一個更多的層。這是因爲您負責兩端(客戶端和服務器),並且因爲您在兩個地方重複使用了相同的對象(將它們放在單獨的jar和maven模塊中是個好主意)
  • 對於使用JAX-RS的項目將API暴露給外部客戶端,將模型從API與DTO分離是一個好主意,這樣它們可以獨立進化。例如,您並不總是希望通過API公開所有字段,或者在更改模型中的某些內容時打破客戶端。

稍後編輯

  • 對於一個項目,僅他們的模型數據字段到客戶端的子集傳送一個DTO層是有用的效率的原因
+0

IMHO一個DTO層是通常需要幾個原因:1)分離關注點2)輸出尺寸優化。就我而言,一些服務返回的數據量相對較大,我需要DTO對象只發送相關字段。這是我第一次使用jax-rs的經驗,但我認爲一個好的做法(即,爲了使事情變得非常乾淨,即使這需要時間),也是將DTO層和服務接口外部化。沒有? – tibo

+0

這取決於我所說的。我以爲你可能需要(幾乎)你的客戶端的所有領域的用戶界面。但是,JPA實體只是POJO,並不是把它們放在客戶端上的這種混合關係。我認爲只維護一層而不是2層的好處勝過客戶端JPA註釋的「醜陋」。 – dcernahoschi