Dot-Net

創建新的 GUI 時,WPF 是不是 Windows 窗體的首選?[關閉]

  • September 11, 2008

Windows 窗體的大多數限制和技巧對大多數程序員來說都是常見的。但由於 .NET 3.0 也有 WPF 可用,即 Windows Presentation Foundation。據說您可以使用它使“性感應用程序”更容易,並且使用 .NET 3.5 SP1 可以很好地提高執行速度。

但另一方面,很多事情都與 WPF 不同。我不會說它更難,但你必須從頭開始學習“一切”。

我的問題:當您必須創建一個新的 GUI 並且項目沒有時間壓力時,是否值得花這些額外的時間?

WPF 使您能夠做一些令人驚奇的事情,我喜歡它……但是,每當開發人員問我是否認為他們應該轉向新技術時,我總是覺得有義務證明我的建議。

您的開發人員是否願意(最好是 EAGER)花時間學習有效地使用 WPF?我從來沒有想過要對 MFC、Windows 窗體甚至非託管 DirectX 這麼說,但您可能不希望團隊在正常開發過程中嘗試“拿起”WPF。運輸產品的周期!

是否至少有一兩個開發人員具有一定的設計敏感性,並且具有最終設計權限的個人是否對開發問題有很好的理解,因此您可以利用 WPF 功能來創建實際上更好的東西,而不僅僅是更“多彩” ,以免費動畫為特色?

您的目標客戶群中是否有一部分執行在可能不支持您計劃的功能的集成圖形晶片組上——或者他們是否仍在執行 Windows 2000,這將完全排除他們作為客戶的身份?有些人還會問您的客戶是否真的關心增強的視覺效果,但是在經歷了 90 年代初期公司內部“我們的業務客戶不關心顏色和圖片”的辯論後,我知道您的競爭對手精心設計的解決方案會讓他們關心,真正的問題是條件是否合適,使您能夠提供讓他們現在關心的東西。

項目是否涉及底層開發,至少對於表示層,以避免嘗試掛鉤到不兼容的遺留腳手架的額外複雜性(與 Win Forms 的互操作不是無縫的)?

您的經理能否接受(或分散注意力)在四到六個月內開發人員生產力的顯著下降?

最後一個問題是由於我喜歡將其視為 WPF 的“FizzBin”性質,有十種不同的方式來實現任何任務,並且沒有明顯的理由偏愛一種方法而不是另一種方法,並且很少有指導可以幫助您製作選擇。不僅您所做的任何選擇的缺點只會在項目的後期才變得清晰,而且您幾乎可以保證項目中的每個開發人員都採用不同的方法,從而導致嚴重的維護問題。最令人沮喪的是,當您嘗試學習該框架時,經常會遇到不一致性。

您可以在我的部落格上的條目中找到更深入的 WPF 相關資訊:

<http://missedmemo.com/blog/2008/09/13/WPFTheFizzBinAPI.aspx>

在嘗試在 WPF 上敲定一個業務線(LOB) 應用程序三個月後,我考慮回到我的項目的 Windows 窗體,並在研究其他人的意見時,遇到了這個執行緒……

是的,WPF 是一項出色的技術,它所帶來的好處遠遠超出了視覺上的吸引力……模板和綁定功能就是很好的例子。整個對像模型提供了更大的靈活性和更廣泛的可能性。然而,這並不能使它成為未來 LOB 應用程序的實際平台。

WPF 在將 GUI 與業務邏輯分離方面解決的“問題”並不是在 Windows 窗體中通過簡單地從正確的架構和思維方式開始就無法輕易解決的問題。甚至 WPF 的對象路徑綁定功能也可以通過一些非常簡單的幫助類在 Windows 窗體中重現。WPF 的數據模板功能非常好,但在極少數情況下,當您完全不知道要在任何給定部分上表示哪些對象時,它們又不是您無法在 Windows 窗體中模擬的。螢幕。

Windows Forms 領先的地方在於成熟度。如果不訪問某人為您解決了 Windows 窗體問題的部落格,您就無法在 Google 上揮動一隻死貓。另一方面,WPF 的可用學習資源相對較少,可用的自定義控制項較少,而且還沒有解決很多初期問題。

在做出 WPF 與 Windows 窗體決策的高峰期,必須是開發環境的成熟度。Windows 窗體編輯器流暢、響應迅速且直覺。有關錯誤的回饋會立即發送給您,解決方案通常很明顯,並且 Windows 窗體中的編譯->調試->編輯週期非常快。

另一方面,WPF 應用程序具有相對可憐的設計時支持,設計視圖在第一次遇到錯誤時已經準備好退出,通常需要在修復後建構項目,然後設計師才願意參與再次。考慮到在很多情況下它要麼根本不起作用,要麼產生完全不直覺的結果,因此也可能不支持從工具箱中拖放組件。儘管有 WpfToolkit 的承諾,但仍然沒有用於 WPF 的可用 DataGrid 產生任何類型的合理性能或設計時間友好性。

調試 WPF 應用程序有點像的ASP.NET 調試範例…命中F5-> 等待 -> 啟動 -> 錯誤 -> 停止 -> 修復 -> 命中F5-> 等待 -> 啟動 -> 錯誤 -> 呻吟 -> stop -> fix -> hit F5…. 程序執行的所有 XAML 都被鎖定,跟踪 XAML 特定問題通常很乏味。

簡單地說,最重要的是,Windows 窗體的開發工具將讓您在 WPF 應用程序的一小部分時間內完成前端……尤其是如果您正在創建主從網格或電子表格像大多數 LOB 都有的介面。使用 Windows 窗體,您可以從已經為您完成的 90% 的工作開始。

我是 WPF 架構的忠實粉絲。我只是希望設計時工具集不像預 alpha 調試建構。


編輯:這個答案是關於 .NET 3.5 + Visual Studio 2008 發布的,但是帶有 Visual Studio 2010 的 .NET 4.0 附帶了 WPF 數據網格。雖然對新的 WPF 開發體驗進行了許多改進,但我這裡的回答保持不變,我想補充以下建議:

如果您急於進行RAD開發,請使用 Windows 窗體。如果您正在尋找建構良好、可維護、可擴展、資源友好、多使用者的業務線應用程序,請考慮使用 ASP.NET MVC + HTML 5 + jQuery ……我使用這些技術的項目帶來了更好的結果為我的客戶更快地取得成果。MVC 提供了與 WPF 相同的模板,而 jQuery 支持動畫和復雜的互動。更重要的是,ASP.NET MVC + jQuery 解決方案不要求您的最終使用者擁有具有良好圖形硬體的現代桌面。

引用自:https://stackoverflow.com/questions/57909