2010-03-31 44 views
1

我們處於將相當大的「傳統」3層客戶端服務器應用程序傳輸/更新爲新版本的早期設計/準備階段。我們正在考慮對WinForms進行WPF,因爲它似乎是微軟推動未來發展的方向,我們希望最大化應用程序的生命週期/跨度。這就是說,在重寫過程中,我們希望儘可能多地改變我們的數據訪問/演示模型,以儘可能提高性能。WPF/.NET數據訪問模型 - 資源建議

我一直在沿着這個方向做一些研究,但我發現討論WPF的絕大多數資源只關注簡單的數據跟蹤應用程序,或者專注於非常基礎的UI設計/控件。甚至討論數據表達的少數項目也是相當初級的。

  • 是否有任何書籍/文章/推薦閱讀/其他資源推薦用於大型企業級商業應用程序的開發?
  • 任何應該/可以避免的「陷阱」?
  • 一般建議儘量減少水下

回答

3

我已經開發了一個大型企業範圍的WPF應用程序近2年。與任何UI開發一樣,瞭解您正在使用的特定技術的最佳UI設計模式也很重要。根據我對WPF的經驗,Model-View-ViewModel設計模式是最普遍的。瞭解WPF的數據綁定功能後,很容易明白爲什麼像M-V-VM這樣的模式被接受。即使您不逐字逐句遵循M-V-VM模式(或其變體),請了解該模式解決的大圖解決方案。基本上,保持您的UI/XAML文件(視圖)在一個單獨的文件和所有的代碼隱藏/邏輯(ViewModel)在另一個文件。該視圖僅對ViewModel中的更改作出反應。

保持ViewModel獨立,你會有幾個好處。

  • 容易地創建視圖模型對象的自動化測試,因爲在它沒有圖形組件。它只是一個具有方法/屬性的對象。

  • 更容易在開發人員之間分配工作(例如,一個開發人員在另一個開發人員構建ViewModel時構建視圖)。

  • 在ViewModel中使用多線程要容易得多,因爲它從不直接與UI控件進行交互。你知道我的意思,如果你曾嘗試在後臺線程上更新文本框。

下面是一些VS從我的經驗窗口形式WPF的優點/缺點的:

優點:

  • 好多了UI的外觀和體驗爲最終用戶。WPF允許您對任何UI元素的外觀進行最終控制。 (例如,包含每行的圖片/按鈕/文本的列表框)。

  • 數據綁定是驚人的。綁定XAML文件中的UI控件以指向ViewModel類的特定屬性,並且所有內容都可以正常工作。 UI簡單地響應ViewModel的任何屬性更改。完全分離!如果您希望多個窗口/用戶控件同時顯示相同的信息並自動保持同步,您會真正看到此優點。

  • 我在MSDN上讀到的一切都是,微軟將更多的資源投入到WPF中,而不是舊的窗體中。

缺點:

  • 大的學習曲線。如果開發人員在沒有WPF經驗的情況下花費幾個月的時間才能創建一個複雜的用戶界面,請不要感到驚訝。這是一項全新的技術,將會有一條學習曲線。

  • 某些常見的用戶控件尚未由Microsoft開發(例如,蒙版文本框,數據網格)。但是,Visual Studio 2010確實帶有數據網格,並且運行良好。另外,市場上還有很多第三方控制。

我能想到的最好resouces: 「在C#2008年臨WPF」

  • - 這本書是真棒。它超過1000頁。它涵蓋了幾乎所有WPF領域。像參考書一樣使用它。通過易於理解的例子,這很直接。

  • 鏈接到約什 - 史密斯的模型 - 視圖 - 視圖模型模式的文章:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090016

    就像我前面提到的,不要太掛在別人的版本的M-V-VM模式。更深入地瞭解WPF如何讓您輕鬆創建ModelView並讓View自動響應變化。

祝你好運!如果你可以通過這個學習曲線,你不會後悔WPF。

0

時間考慮尋找到使用MVVM模式。

1

VS2010團隊在轉換爲WPF時一直保留有關獲得良好性能的博客。

他們有一個系列,WPF in Visual Studio,提供了一些建議(尤其是second part)。

1

一般建議儘量減少時間水下:

  1. 瞭解的數據,只要你所能結合。在您製作的每個原型中使用數據綁定。即使您所做的全部工作都是圍繞面板佈局或柵格分隔器的工作方式進行的:將XmlDataProvider放置在窗口中,創建XML測試數據並綁定到它。如果您使用Kaxaml進行原型製作,這一點尤其有用。我不知道一旦你掌握了VS 2010就會有多重要,但是如果你使用VS 2008,Kaxaml是無價的。

  2. 閱讀Bea Stollnitz關於how to debug data binding in WPF.的文章設置您的VS環境,以便在測試用戶界面時始終可以看到輸出窗口。

  3. 從一開始就使用MVVM和數據模板。假設代碼隱藏不存在,並且在UI和數據模型之間進行互操作的唯一方法是通過數據綁定和命令。你會很快退出這個位置,但是如果你讓自己從跳躍中學習,你會發現你做的所有事情都更容易。

  4. 假裝你的應用程序需要能夠在36" 寬屏顯示器和手機上運行。你會使用固定的字體大小和衡量事物的像素?你不會的。

  5. 瞭解Grid的共享尺寸範圍和明星大小,這兩件事意味着你要在任何地方使用 問題的答案:「如何讓這個元素使用屏幕上剩餘空間的一半?「是:Grid(但是,如何獲得此元素以使用屏幕上的所有剩餘空間?)的答案是:使用DockPanel。)

  6. 請注意WPF並不成熟的技術及其含義。這並不是說它有問題(它不是,雖然有錯誤),或者功能不足(功能不足)(同樣存在問題,但並非常常是關鍵問題):這就是有很多如何做的事情-X-in-WPF文章和博客文章,這些文章是在我們真正知道什麼是可維護的,什麼不可維護的情況下編寫的驗證就是一個很好的例子。您可以找到解釋如何設置驗證規則並將其附加到綁定的最終解釋。你可能不那麼容易找到後面寫的文章,說明爲什麼你想在大多數真實場景中使用IDataErrorInfo。對於接受你發現的第一個答案,你會比平時更加​​猶豫。

  7. 如果您認爲可組合性和依賴注入是模糊的架構 - 宇航員概念,並且很少適用於現實世界的軟件開發,那就直截了當。

  8. 不要錯過複雜的依賴屬性。他們可以做很多事情,但作爲一個實際問題,首先需要考慮的是變更通知和價值繼承。更改通知需要一個屬性設置器來做一些事情;這是內置到SetValue。值繼承需要一個屬性getter來做某件事;這是內置到GetValue。屬性值既可以是本地也可以是繼承的,這意味着不是將值存儲在字段中,而是將其存儲爲字典條目;如果給定的財產沒有本地價值(即DependencyObject的詞典中沒有財產價值),則DependencyObject將尋找父母以獲得其價值。這個術語真的很冗長,但這些想法非常簡單。

1

我發現這個資源提供了幾個很好的例子。

微軟多功能一站式示例代碼庫

微軟多功能一站式示例代碼庫 描繪的微軟開發技術 通過典型事例的框架和骨架 三個 流行的編程語言(Visual C#,VB.NET,Visual C++的Visual )。每個樣品 被精心選擇,組合和 記錄來證明一個 經常問,測試或使用基於我們在MSDN新聞組和論壇 支持 經驗 編碼方案。如果你是一個軟件開發商,你可以用血,肌肉和靈魂填充骨架 。如果您 是一名軟件測試人員或支持 工程師和我們一樣,你可能會延長 示例代碼一點,以滿足您 具體的測試場景或引用您的 客戶對這個項目如果 客戶的問題與 我們收集哪些一致。

今天是3月12日,2010年 有超過360個代碼示例項目 蓋24微軟開發 技術,如天青,Windows 7和Silverlight的 3.收集由生長每週 六個樣本。您可以在 一體式代碼框架樣本 目錄中找到 樣本的最新列表。

http://1code.codeplex.com/