我有三個層一個asp.net MVC應用程序: - 與實體和儲存庫(NHibernate的)圖案 數據層 - 與服務(功能)服務層,它與數據層通信。 - 用asp.net mvc應用程序的ui層,它與服務層進行通信。缺少我的應用程序的一部分/層
問題是我的實體中的數據與我的視圖中的數據不同。 所以我使用自定義形狀的ViewModels。但我不喜歡我在服務層和視圖模型之間進行映射的方式。 一切都在控制器動作中發生。我使用AutoMapper,但我認爲意大利麪代碼太多。 讓我舉個例子:
1.)我有一個用戶註冊過程。我有一個名字,姓氏,電子郵件,OpenId輸入映射到ViewModel中相同的 屬性。但是,比起我需要不同的實體來存儲這些數據(一個用於用戶,另一個用於openid身份 - 用戶可以具有多個openid身份)。 所以在我的控制器操作中,我有一個視圖模型和用戶實體之間的映射(AutoMapper)和視圖模型和openid實體之間的映射(AutoMapper)。在那之後,我用服務功能保存每個實體 。
我錯過了一些東西 - 比如自定義的DTO(我認爲viewmodel應該在服務層和web層之間共享),它將在web和服務層之間傳遞。
2.)我在應用程序中有搜索功能。從控制器操作中,我調用服務層,它返回與搜索條件匹配的文檔實體列表。 但問題是我也想顯示每個結果的類別(不同的實體)。因此,在控制器操作中,我在結果之間循環,並在視圖模型中將類別信息 添加到IDictionary結構中。
我也想念這裏的東西 - 又一些DTO,它將返回對(新對象)列表:文檔,類別。
DTO是否是正確的模式?我應該看看DDD嗎?任何相關的材料將不勝感激。
非常感謝!
謝謝你的回答。我會考慮添加新的類型而不是DTO(儘管我需要一些DTO用於我的Silverlight客戶端的wcf服務 - 但這是另一個故事)。 – rrejc 2009-11-24 21:25:57