2012-08-24 166 views
-1

看到MVVM如何被高度認爲是一個很好的系統設計模式,我想我可能會跳上去給MVVM一個鏡頭。Silverlight 5 MVVM最佳實踐

只是我自己的一些背景之前,我首先的問題:

我已經做了幾年的ASP.NET Web表單的發展。我也在ASP.NET MVC中做了相當多的開發,我對此很滿意。

目前,我們有許多使用ASP.NET MVC 3編寫的「主幹」應用程序,我們可以在我們接近時定製並向客戶銷售這些應用程序。這些應用程序都是用於內部使用,因此插件不會成爲問題。開發的真正問題是,對於具有複雜業務規則的大規模業務應用程序,ASP.NET MVC往往會讓我們放慢速度(編寫jQuery/javascript>服務器端處理>返回結果,使用jQuery通知>改變視圖,沿着這條線)。

然後我開始尋找答案,這將幫助我們提高交付時間和響應速度(嗯,我們都知道JavaScript是如何殺死我們的),我的搜索將我帶到了Silverlight(我們有時間去改變,不用擔心)。

所以來這裏的問題:

  1. 我接觸過許多的Silverlight MVVM樣品在線,但它們都顯示應用程序一樣簡單,只有一個數據庫表進行交互。 MVVM模式非常適合大型應用程序嗎?
  2. 在MVC中,我習慣了Ninject的依賴注入,將UnitOfWork的實現傳遞給我的控制器。在我在網上找到的所有樣本中,沒有一個使用任何形式的DI。真的沒有必要嗎?由於MVVM的想法是分離的,爲什麼不將ViewModel與Model分離?
  3. 我已經閱讀了Jeremy Likness出版的一本書,名爲Designing Silverlight Business Applications。他使用MEF做解耦,我認爲這並不適合我們的應用。我們並不需要做「熱插拔」。你對此有何看法?
  4. MVVM是關於命令,數據綁定和無代碼隱藏的。如果我想與不接觸命令的用戶界面進行交互,該怎麼辦? (我也不太清楚這一點,我猜的ListView OnSelectionChange?)

回答

1

我有所有的答案沒有答案(從來沒有使用過MEF),但我可以告訴你我的經驗:

1 - 我一直在開發一個相當大的Silverlight應用程序,MVVM非常適合具有可維護的應用程序。由於應用程序大小,我們遇到的更大問題是因爲Silverlight,而不是MVVM 8-)

2-我沒有使用它太多,但它在很多情況下很有用。有幾個工具包可以像MVVM Light Toolkit一樣使用DI和Silverlight: http://compiledexperience.com/blog/posts/blendable-mvvm-dependency-injection-and-unit-testing

4-對於UI之間的交互,您可以使用介體模式。相同的MVVM Light Toolkit具有一個Messenger訂閱,發送和接收消息,並保持每層的解耦。

希望這有助於你;-)

+0

1.你介意分享一下你的經驗嗎?是否因爲.xap的文件大小?你有沒有遇到任何併發症?這就是爲什麼我覺得很奇怪。就像你說的那樣,你還沒有用過MVVM的DI。我可以知道爲什麼嗎?是否因爲沒有必要進一步解耦?我會研究這一點。感謝您的反饋意見。 –

+0

xap大小現在大約6Mb,所以它不是問題(之前它比以前更大,因爲我們包含的資源比需要的多)。我們遇到的更大問題是報告。只有當你想成爲「真正的MVVM」時才需要DI,我不需要那麼多的解耦。 – zapico

+0

非常感謝與我分享:) –

2

要添加到以前的答案:

  1. 我們正在開發一個大型企業級的Silverlight平臺和一組使用MVVM應用。似乎工作得很好。

  2. 我們正在廣泛使用DI。我們的系統建立在棱鏡之上。棱鏡包含大量的各種複雜的示例應用,說明在MVVM中使用DI。

  3. 我們使用Unity作爲我們的Io​​C容器。棱鏡包含MEF和Unity的指導。 Unity似乎是一種更傳統的IoC方法。

  4. 在絕大多數使用綁定和命令的情況下,都滿足了我們的需求。對於其他我們使用表達式觸發器和操作。您也可以根據需要創建自定義觸發器/操作。

+0

感謝您的回覆。這可能有點偏離主題,但在過去的兩天裏,我一直在檢查Caliburn.micro,這似乎很容易讓它建立和運行。 Caliburn.micro和Prism有什麼不同(就開發複雜性而言)?你會推薦一個新手團隊使用Prism而不是Cliburn.micro嗎? –

+0

對不起,沒有Caliburn Micro的經驗。 – boris

+0

謝謝。我會檢查每一個,看看哪一個最適合我們的團隊。乾杯 –