2010-06-01 20 views
2

我有SOA處理差異客戶端數據(asp,sl)的數據。這個設計的基礎是我的商業模式的領域。爲了運輸,向客戶展示我使用DTO。爲了將域映射到DTO,我使用AutoMapper。現在我應該堅持來自客戶的新實體。我也想在這種情況下使用我的DTO。所以我有一些問題,因爲我不太熟悉這個設計NHibernate。 DTO - >域名

1)在客戶端上構建DTO並將其發送到網絡服務上是否是一種很好的做法?可能我應該通過我的域名?

2)有可能有幾個DTO的一個域(一個在網格上顯示,另一個在保存)。爲了節省,我需要在客戶端設置所有非原生道具。

3)DTO - >到域。如果我有int,我可以使用AutoMapper爲這個ID生成NHibernate Proxy,或者我應該手動執行。

您的出場和練習非常有趣。 感謝您的回答!

回答

-1

您的架構通過線路上的DTO變得更加靈活,而不是域模型實體。每個域可以有多個DTO。

3

一個很好的做法是使用屏幕和命令特定的DTO。

一個例子是,當用戶正在查看客戶顯示屏幕時,有一個DTO包含該客戶的所有信息(或最多,如果您需要延遲加載某些內容)。

這項技術的價值在於數據可以來自多個來源,這允許您將您的域建模爲對您有意義,而不是您的屏幕設置方式。它還允許您在不需要擔心屏幕的情況下更改域名,因爲您只需更新映射。

根據您的編程語言的不同,可能會有這樣的工具,例如AutoMapper(用於C#),它允許您輕鬆創建域和DTO之間的映射。

+0

我是新的使用這種架構:DTO + NHibernate serviceLayer;您是否將映射/複製域(包括子集合)的版本/時間戳到DTO以達到一致性目的? – kite 2012-07-04 10:11:37

+1

如果知道域對象已經改變很重要,那麼你會複製它。這就是說,我已經做了大量的屏幕,最後一次更改獲勝是一個完全可以接受的策略。警告人們,每個屏幕上的內容都會發生變化,這會讓您的用戶感到惱火。 – 2012-07-04 12:53:14

+0

感謝shane,如果您不介意,還有1個問題:) 與更改/髒跟蹤相關DTO(DTO的集合)用於從UI網格批量更新/刪除/插入;你有關於如何使用NHibernate作爲CRUD服務層+ automapper實現這些資源的提示/鏈接?我不想重新發明輪子(刪除標誌的負ID,插入的新GUID +如何從DTO的髒屬性更新部分域屬性,僅更新來自ALL DTO屬性的域屬性)。 – kite 2012-07-04 19:00:04