2013-02-16 25 views
0

我知道DTO不是ViewModel。當它的濫用,但其起源目的不同時,用法可能相同。從模型到DTO到ViewModel似乎太多了

我將我的Repository中的域實體返回給服務。 在我的服務中,由於表格視圖的需要,我必須重新整形實體。

現在我有衝突。通常我的服務會返回一個帶有數據的DTO,在這種情況下,由於表示層的需要,數據會被重新整形。有人可以說DTO是一個ViewModel,但我不想從我的服務中返回一個視圖模型。

在這種情況下,DTO是一個ViewModel,行爲是缺少的,但如果沒有進一步的行爲會怎麼樣。

這裏有些不對勁。

+3

請擴展問題。這似乎更像是一個建築的選擇,而不是實際上難倒... – 2013-02-16 16:17:15

+0

@Dave是它的拱門。選擇。你究竟有什麼不瞭解,我不知道我應該擴展到哪裏。請解釋:) – Elisabeth 2013-02-16 17:19:27

+0

由於您的問題,我迷路了,我想回答「只需使用演示模型。將數據從您的DTO傳輸到PLM,然後返回。」但似乎你已經知道這一點。 – 2013-02-16 17:33:07

回答

1

它可能會覺得太多了,但不要忽視,它可能只是現在您在服務和UI級別想要生成的內容完全匹配。讓這兩個部分分開但幾乎完全相同,沒有什麼本質上的錯誤。

通常,ViewModel將進一步擴展爲支持計算字段,用於UI選擇的選項等。在路上擴展該不同對象總是更容易,而不必炸燬您的服務(以及任何依賴於它)。

另一方面,我真的很喜歡YAGNI。所以,如果你真的相信這個對象不可能成長,那麼回收並不總是很糟糕。 (更多的上下文肯定會有助於這個呼叫)。

最後,不要花太多時間在學術上。你似乎對你想要完成的工作有很好的把握,唯一不錯的代碼是交付代碼。編寫測試,分離你可以做的,但是把代碼拿出來。我看到項目因過度工程而失敗。

乾杯。

+0

我去你的答案也不是最適合我atm,因爲我有更多的問題... http://stackoverflow.com/questions/15097732/a-viewmodel-has-a-behavior-methods-compared-to-a -dto-但是 – Elisabeth 2013-02-26 19:36:34

+0

謝謝Elisa,不斷問! – MisterJames 2013-03-04 16:31:17

0

我感到你的痛苦。我不使用「存儲庫」模式,但是我的服務層將DTO返回給我的控制器,然後在某些時候填充ViewModel中的大部分屬性或至少一些屬性。這有時似乎有點矯枉過正,而且總是提出這樣一個問題:「這是做事的最好方式嗎?」從我所瞭解的和從我研究的內容來看,答案是「是」。

0

我建議你在你的控制器中有一個PresentationService,該對象是負責返回你的視圖模型的東西。然後,您的演示服務將使用域服務,數據服務或您的存儲庫,或者您需要的任何其他功能來將數據聚合到您的視圖模型。

如果來自數據庫的形狀是你想要的,但如果它不是,並且你有其他類型的數據投影,那麼使用DTO作爲視圖模型就沒問題,那麼演示服務是一種很好的做法。