我正在使用C#中的幾個ASP.NET 4 WCF服務,並且想知道將我的代碼與WCF結構解耦的最佳方式。如果這不是太多的工作,客戶可能不在乎。通過ViewModel外觀實現WCF解耦ASP.NET
我創建了一個外觀層,以便我的WebForms UI可以使用像string,int和datetime這樣的扁平簡單類型與它交談。 Facade生成並讀取WCF所需的請求/響應對象。我讀取Response對象並將其轉換爲一個更簡單的Presentation對象,供客戶端使用。然而,Response對象返回一些複雜的對象類型,例如包含OrderItem的OrderHistory,其本身包含用於例如郵寄地址。
現在我應該重新創建所有這些複雜的對象視圖?即OrderPresentation包含IEnumerable-OrderHistoryView-,它包含IEnumerable-OrderItemView-,它包含DeliveryAddressView或者我誤解了這個?
對於一些較簡單的對象,我已經能夠使用AutoMapper,但不知道如何或如果我應該將其應用於嵌套的複雜對象。也許我不應該這麼麻煩去解耦,只是將我的外觀和表示對象綁定到WCF模型?
請幫忙嗎?任何好的教程例子呢?
我與取得了一些進展:
public static IList<OrderHistoryView> ConvertToOrderHistoryView(this OrderHistory[] orderHistory)
{
return Mapper.Map<OrderHistory[], IList<OrderHistoryView>>(orderHistory);
}
和
Mapper.CreateMap<OrderHistory, OrderHistoryView>()
.ForMember(dest => dest.Items, opt => opt.MapFrom(src => src.Items));
你是正確的感謝您傾聽並提供您的建議。我一直在學習,所以想要應用Automapper並使用viewmodels,但是這些WCF是站點的核心,所以依賴性是可預期的,客戶端不會在意。即使Automapper具有很強的處理複雜性的功能,它也需要額外的工作。我認爲你必須權衡每個項目使用視圖模型的成本/收益。除此之外,我還希望看到一個代碼生成器,使Viewmodel類成爲一個起點,您可以將它們編輯爲您需要的內容。 – BlueZebra 2011-05-19 06:00:06