2011-02-05 108 views
0

首先抱歉我的英文不好! 我在許多Silverlight教程中看到以下內容:Silverlight模型映射和存儲庫模式問題

我們在服務器端有模型,例如Product。 webservice有一個方法,例如Ilist GetProducts(); 在客戶端添加服務引用時生成的產品類。然後,我們將在viewmodels和xaml中使用此產品模型。 但是,如果有人在服務器端進行更改或產品模型更改(例如「名稱」屬性)將會是「NameProperty」,或者任何人嘗試將Web服務更改爲另一個。產品代理類也將在客戶端進行更改,然後我們必須「刷新」使用產品類的視圖模型和綁定等。

這個怎麼樣?:解決

在Silverlight的一邊,我有一個IProduct接口,其中包含了的ViewModels和XAML將使用所有財產。 我做了一個IRepository接口,它有一個IList GetProducts()方法。我實現了這個接口,例如從wcf服務獲取數據的WCFRepository。 GetProduct方法的實現將所有產品映射到IProduct的實現,只需將屬性複製到IProduct的實現。因此,當服務器端的產品發生變化時,我只需更改WCFRepository上的映射。或者,如果我將WCF服務更改爲其他服務,則只需編寫OtherRepository並在GetProducts方法的實現中編寫映射。 在這個解決方案中,視圖和視圖模型不會改變!

我的解決方案呢?我正朝着正確的方向前進?有沒有關於這個的很好的示例,教程,模式?任何關鍵字都會很好! :) 謝謝!

回答

0

一般來說,我認爲你的想法比不好。首先你說服務的界面不穩定,如果它發生了變化,該怎麼辦?那麼如果你的應用程序和服務是單一程序過程的一部分,奇怪的是有人想改變你的服務屬性名稱而不修復應用程序,因爲它們將被捆綁在一起。

您的方法看起來像是鏈中不必要的鏈接,必須維護,並且通常會代表您的真實服務。目標是提供一個「常量」(如果您需要更改存儲庫接口,我認爲它將被要求的可能性超過了接近您的默認服務中所需更改的可能性,並且您不會贏得任何事情,因爲應用程序必須是重新映射)部分服務完全接口..但我相信,如果服務接口將開始包含比存儲庫服務更多的功能,您將不得不移動它們並在其中複製鏡像功能。

所以一般你不會受益太多,但必須在服務器端經常執行X2作業。