2012-03-15 26 views
0

尋找一些指導。使用DTOs - 指導

我正在構建一個應用程序,SL4與WCF作爲後端服務。我的WCF服務層位於域模型上,我正在將我的域實體轉換爲使用匯編程序來篩選特定的DTO。

我有一個屏幕(安全相關),顯示了用戶和他們所屬的組,現在用戶可以添加和刪除用戶組,然後他們可以點擊應用按鈕。只有當這個應用按鈕被擊中時,纔會提交更改。

目前,我有被髮送到客戶端來填充屏幕,我的意圖是在打應用於UserDetailUpdateDto發送回服務器來執行實際的更新域模型UserDetailDto。

聽起來不錯?

如果是這樣,當用戶正在進行更改客戶端應該我的UserDetailUpdateDto發送更改,即。添加了什麼以及什麼被刪除了。

不確定,指導會很好。

回答

0

當對於需求和部署環境瞭解甚少時,指導總是很棘手。不過,你的方法對我來說聽起來很合理。我喜歡這個關鍵的事情:

1)你正在保持你的DTO與你的域實體分開。在小型簡單的應用程序中,通過網絡發送實體可能會很好,但隨着複雜性和功能的增加,它們可以開始相互融合。

2)您區分查詢對象(UserDetailDto)和Command對象(UserDetailUpdateDto)。再次,這兩者通常可以滿足使用單個對象,但隨着複雜性/功能增加,您將開始膨脹,因爲對象正在服務兩個主對象(Query對象將在客戶端使用,並且Command對象將在服務器)。我使用一個約定,所有的命令DTO都以一個動詞開頭(例如UpdateUserDetail),它只是讓客戶端的'方法'中的'數據'更容易分類。

如果SL應用程序可能隨着更復雜的屏幕邏輯變大,那麼可能需要查看Model-View-ViewModel(MVVM)模式。它允許您將屏幕設計與屏幕功能分開。它爲開發團隊分配工作提供了更多的靈活性,並更好地支持單元測試。至於在UpdateUserDetail對象中發回的內容,我認爲這應該以最容易在域模型(或WCF服務位於您的域模型中)工作的內容爲指導。一般來說,DTOs越小越好。