2009-12-22 83 views
2

我對整個MVVM模式感到陌生,並且試圖將我的頭圍繞在它周圍。我目前試圖弄清楚的是:在一個結構良好的解決方案中,ViewModel在哪裏生存?WPF/MVVM - ViewModel在哪裏?

目前我的設計看起來是這樣的(排序):

  • 應用程序(圖)
  • DomainSpecificCode(ClassLibrary)
  • 網關(ClassLibrary)

如果我是添加到另一種類型的視圖(例如ASP.NET或Silverlight),哪裏會是ViewModel存在的最佳位置?

回答

2

ViewModels應該進入應用層,因爲它們往往是技術特定的。

例如,您可能希望根據ViewModel的狀態將View屬性綁定到特定的顏色。但是,Color是通過Windows窗體,ASP.NET和WPF上的不同類型實現的,因此無法在不同技術中重複使用ViewModel。

如果添加新應用程序,則還必須提供新的ViewModels。

+0

所以你說的視圖模型的代碼應該生活在同一個域中的特定代碼項目作爲視圖代碼?在WPF和Silverlight的情況下呢?如果代碼是以Silverlight可以使用的方式編寫的(我並不是說它是:(),我還應該爲Silverlight應用程序和WPF應用程序編寫單獨的ViewModels嗎?(對不起,如果這些看起來很愚蠢問題) – AshtonKJ 2009-12-22 11:53:09

+1

它可能與View代碼在同一個項目中,或者它可能存在於另一個項目中,重要的一點是ViewModel傾向於針對特定的技術,您可以爲WPF和SL編寫通用的ViewModels因爲他們是如此相似,雖然 – 2009-12-22 11:59:36

+1

太好了,謝謝你的回答,這聽起來像我應該做一些測試,看看我是否可以在SL和WPF之間實現ViewModel的可重用性,然後我將有一個獨立的ViewModel項目專門針對我去ASP.NET的情況。 – AshtonKJ 2009-12-22 12:13:54

3

最近,我建了一個MVVM桌面應用程序,它有2種口味:

  • WPF文檔庫GUI

兩個exe文件都使用相同的視圖模型

  • 控制檯應用程序,一個是WPF另一個則不是。

    我能我的解決方案分爲以下項目(庫/ EXE):

    • 與項目無關的可重用的代碼(稱爲公用)
    • 項目模型+持久
    • 項目視圖模型
    • WPF應用+視圖
    • 控制檯應用程序

    僅通過使用「查看模型」就可以輕鬆構建控制檯應用程序版本。控制檯應用程序代碼只有不到200行代碼,並且基本上加載了ProjectViewModel並對其執行操作。

  • 1

    article介紹WPF MVVM應用的具體架構。

    層:

    • 表示層:瀏覽次數
    • 應用層:的ViewModels
    • 領域層:
    +0

    WAF應該開始使用MEF。因爲MEFedMVVM是如此niceeee。 – Elisabeth 2010-11-13 13:14:06