2009-10-08 33 views
0

繼續從this對Silverlight體系結構的初步調查,我有一些需要考慮的新要求。Silverlight設計模式的性能 - 非常豐富的客戶端UI

我們預計我們的Silverlight客戶端界面圖形很重,GIS界面,多個圖表,儀表和數據網格以Widget風格排列。新的小部件將由用戶動態生成。

假設用戶想要從預先填充數據的現有數據網格窗口小部件動態創建圖表窗口小部件。在我看來,如果我們在服務器上使用視圖模型的MVVM模式,當所需的數據已經位於客戶端時,這會導致不必要的回撥。

現在顯然服務器需要知道客戶端上的這個新的圖表小部件,但是如何在客戶端首先創建小部件(使用現有客戶端數據),然後通知服務器有關新更改?

在我們的Intranet中,客戶端與服務器之間的網絡連接不是特別好,所以性能至關重要。

從我最初的研究看來,通用的Silverlight體系結構模式要求將盡可能多的業務邏輯推回服務器。我理解這一點的理由,但擔心它會真正傷害我們應用程序的可用性。

是否有解決此問題的特定設計模式? MVVM,Prism或其他常見的Silverlight體系結構支持「客戶端綁定」嗎?

有沒有一個更正式的名稱,我試圖描述什麼?

我對Silverlight和MVVM等設計模式都很陌生,所以如果我的任何假設都錯了,請糾正我的錯誤。

+2

聽起來像你需要一些案例研究。我的觀點之一是「常見的Silverlight體系結構模式要求將盡可能多的業務邏輯推回服務器」是不正確的,並且會破壞Silverlight的額外功能。您可以在客戶端上使用更強大的驗證邏輯來​​保存您通常使用AJAX的往返行程。 – sipwiz 2009-10-08 08:48:25

+0

@sipwiz:的確,我很高興這樣做是錯的。我對如何最好地在客戶端和服務器端定義模型感到困惑。一些案例研究將是最受歡迎的。 – Alex 2009-10-08 09:03:50

+0

我發現的是,Silverlight可以讓你在服務器或客戶端上做同樣的事情。它可以讓你選擇你喜歡的。例如,驗證可以在服務器上或在客戶端上完成。 – johnnywhoop 2009-10-08 13:53:05

回答

2

MVVM模式用於分離關注點。它沒有定義你如何或在哪裏獲得你的數據。

該模型是數據。它可以是你從任何來源獲得的數據。在Silverlight中,獲取數據的最常見方式是通過web服務(SOAP/REST)。但是你的模型可以是任何地方的任何數據。

視圖模型只是可能實現INotifyPropertyChanged接口的另一個類(因此綁定可以自動更新)。這個類是您視圖數據的抽象。假設它有一個名爲「FirstName」的字符串屬性。

該視圖是您的UI(SL中的用戶控件)。你在這裏設置綁定到你的ViewModel。 IE,。

當您設置您的視圖DataContext時,視圖和視圖模型放在一起。 myView.DataContext = new MyViewModel();根據您想要設置的方式,有很多方法可以設置DataContext。

棱鏡只是一個框架,可以幫助編寫WPF/SL中的解耦應用程序。它不強制使用任何UI模式(即MVP/MVC/MVVM)。它帶來的是一大堆可用於協助MVVM開發的類,例如中介(EventAgggregator)和依賴注入容器(Unity)。

所以足夠離題...我會建議,你有一個Web服務,你可以得到所有的數據。你的SL應用程序會得到這些數據(大多數情況下,Web服務將在視圖模型中調用)。該數據現在存在於客戶端,您可以設置您的虛擬機以在您的視圖中綁定到此數據。