2011-12-04 82 views
0

我是WPF的新手。我學到的是WPF遵循MVC模式。我的想法是用WPF和NHibernate設計一個新的應用程序,但NHibernate使用MVVM模式。這實際上並不符合WPF的MVC。好吧,有很多「解決方案」可以解決這個衝突,但對我來說這聽起來不太好。微軟建議讓WPF應用程序持久化嗎?

我的問題:是否有任何「主要方式」使WPF桌面應用程序的數據在SQL-Server數據庫中持久存在?微軟說什麼?你說什麼?

+0

我想你應該多讀一點關於設計模式,如MVC和MVVM。 –

+0

如果我理解這個問題,您想要將應用程序範圍設置保存在數據庫而不是本地文件中。在這種情況下,您將從SettingsProvider派生一個類並相應地進行修飾;然後創建一個類的實例,以訪問/保存您希望在應用程序執行成功之前堅持的信息。 –

回答

2

Microsoft建議在WPF中使用MVVM模式。你可以在很多博客文章檢查了這一點,但這裏是一個很好的起點:

MSDN Magazine - WPF Apps With The Model-View-ViewModel Design Pattern

如果您想了解更多有關微軟推薦的架構,你可以檢查出的模式和做法的網站,或者看看大衛海登的網站有很多很棒的屏幕廣播。

在爲桌面客戶端構建數據訪問層方面有很多方法。一些常見的是Repository Pattern,Active Record,並直接使用ORM。與NHibernate和實體框架不同,Active Record模式不基於POCO。這些對象在其內部保持持久性。這使得一些分佈式和斷開連接的情況更有效。目前的趨勢是從存儲庫模式導出通過Ayende總結在這篇文章中:

Ayende - Repository is the new Singleton

基本上按照本文中的實體框架NHibernate的或的DbContext對象的會話對象遵循一種庫模式中他們自己,因此添加存儲庫層是多餘的。

就MVVM而言,這些模式和技術將存在於模型中。視圖模型將充當中介 - 因此您不會也不應將視圖直接綁定到持久對象。

我希望這有幫助!

+0

非常感謝!這確實非常有幫助! – PeterP

4

沒有。你錯了 - 這就像問梅賽德斯建議什麼樣的汽車使用特定類型的擋風玻璃雨刷器的清潔材料。

基本上持久化是應用程序的一部分,WPF是演示文稿和另一個。它使ZERO區別如何呈現數據。你創造一個狗的情況。

這並沒有真正一起MVC適合從WPF

由於somene誰使用了這一點 - 它絕對不會。完全。

好吧,有很多「解決方案」來處理這個衝突,但對我來說這並不真的 聽起來不錯。

瞭解更多有關adrchitecture的信息。

是否有任何「主要方式」使WPF桌面應用程序的數據在SQL-Server 數據庫中持久存在?

不會。與其他任何類型的應用程序相同 - 總是存在折衷,所以不存在銀色子彈。因此 - 你必須提出解決方案,這需要經驗。

NHibernate的但NHibernate的使用MVVM模式

我最後一次檢查,NHibernate的是,這是完全能夠支持的處理應用的多個不同的方式的O/R映射器。所以,這個說法是錯誤的。