9

數據傳輸對象與數值對象相同還是不同?如果他們不同,那麼我們應該在哪裏使用DTO,我們應該在哪裏使用VO?數據傳輸對象與數值對象相同嗎?

我們正在談論的編程語言是Java和背景是 - 有一個Web應用程序,它從數據庫中提取數據,然後對其進行處理,最終處理後的信息顯示在前端

+0

您的問題出現在什麼編程語言或其他上下文中? – Marcin 2012-01-12 14:46:02

+0

編程語言是Java,上下文是 - 有一個Web應用程序,它從數據庫中獲取數據,然後對其進行處理,最終將處理後的信息顯示在前端 – Gaurav 2012-01-12 17:32:26

+0

然後將其添加到您的問題中,並進行適當標記; – Marcin 2012-01-12 17:35:39

回答

8

值對象是一個簡單的對象,其等式不基於身份。 數據傳輸對象是用於在軟件應用程序子系統之間(通常在業務層和UI之間)傳輸數據的對象。它只關注簡單的數據,所以它沒有任何行爲。

+0

請您詳細說明「誰的平等不基於身份「,舉一些例子? – Gaurav 2012-01-22 15:49:03

+1

我可以想象這句話意味着VO不必直接映射到域實體,而不是直接映射到它的某些域或它的不同「圖片」。通常VO被理解爲與DTO相同,但DTO更多地基於「場構成」(來自不同領域類的一些領域)。 DTO示例可以是來自CustomerAddress類和Customer類的字段之間的合成,以將其提供給表示層。 – frandevel 2013-04-09 07:00:55

+1

@Gaurav兩個值對象具有相同的值時是相等的,但不一定是相同的對象... – JuanZe 2013-04-09 15:54:46

2

如果您不想將實際的域對象發送到服務的客戶端,那麼在服務的邊界使用DTO - 這有助於減少客戶端和服務之間的依賴關係。

值對象只是對象的等式不基於身份,例如java.lang.Integer

DTO和值對象並非真正的替代品。

2

數據傳輸對象是將一堆數據從一層或多層移動到另一層的混合體,目標是通過將一堆內容打包到相同的數據結構中並最終減少來回調用的次數它在一起。有些人也使用它,比如Michael points out in his post here,這樣一層使用的類就不會暴露給調用它的圖層。當我將DTO稱爲「混合」時,我的意思是沒有實現精確的抽象概念,這是一種實用的解決方法,可以幫助應用程序層之間的通信。

價值對象是我們只對其價值感興趣的東西,例如monetary amount,日期範圍或來自lookup table的代碼。它沒有身份,這意味着如果你有幾個人,就不會擔心自己是哪個人,因爲他們本身不是。

對比值對象在系統中具有唯一標識的對象,稱爲實體。如果你有一個跟蹤顧客付款的系統,顧客和付款是實體,因爲它們代表特定的事物,但是付款的金額只是一個價值,它本身並不存在,就你的系統而言。與你的系統有什麼關係決定它是一個價值對象還是一個實體。

相關問題