2009-11-06 79 views
2

我完全不熟悉WPF,因此我花時間在網上搜索有關如何完成任務的示例和教程。我總結出前進的道路是嘗試使用MVVM模式作爲我的應用程序結構的指導。如果不是我的技術能力,我對這個理論完全滿意。我有一個或兩個問題,希望可以或許點我就有關應用程序設計的幾個問題的正確方向。WPF,應用程序設計建議和數據庫併發性

  1. 我希望保留一份客戶名單。我見過幾個這樣的例子。這些涉及加載包含Customer對象列表的Customers存儲庫。爲客戶創建相應的View和ViewModel。當用戶選擇一個客戶編輯,視圖,並在客戶收集客戶對象被創建視圖模型。這會在進行更改時使所有內容保持同步。我的問題是:我的客戶模型是非常複雜的,它包含了基本的客戶信息,姓名,地址等,但屬性也對客戶,類別列表,產品簡介,目標預算等等。我想這些是可用於在客戶編輯查看,但不希望將它們加載到客戶存儲庫中。我只想在需要時加載擴展的客戶信息,但要更新客戶視圖的更改。達到此目的的最佳方式是什麼?

  2. 我的第二個問題是:如果我將客戶信息分成幾個標籤,我應該爲每個標籤有單獨的View和ViewModel,還是隻有一個View。最佳做法是什麼?

  3. 我想我會使用Linq to SQL來處理數據庫處理。在多用戶環境中客戶可能同時被多個用戶添加。我如何反映客戶存儲庫中其他用戶所做的新增功能?我需要重新加載嗎?

  4. 有關處理數據庫併發問題的任何建議。如果另一個用戶編輯或刪除一個客戶我目前編輯,當我嘗試和保存應該發生什麼?我所熟悉的數據集和ADO.net和處理使用DataAdapter時產生的任何錯誤的併發,是不是也有類似的方法與LINQ to SQL的?

我明白這裏有很多含糊的問題。但我會感謝所提供的任何指導。

問候 添

回答

1

我會告訴你我的意見,但你必須要形成你自己的觀點。

我不太喜歡這些樣品,因爲他們只爲一個實體(客戶)工作很多。我有很多我的應用程序的實體,所以我結束了一些代碼生成和使用更多的繼承。

樣本需要一些現實檢查。例如,在Josh Smith MVVM示例中,如果更改客戶,則更改會傳播到列表和其他地方,這在示例中很不錯,但如果您有一個業務應用程序,則不需要傳播除非用戶按下了「保存」並將所有業務規則應用於對象。

我也不會購買純MVVM,因爲禁止在代碼背後放置任何東西,而且您必須code lots of lines only for a double-click,來人上,這是一個簡單的雙擊。

關於你的問題:

  1. IMO實現延遲加載列表(see Rob Connery post)的單一視圖。
  2. 您必須重新加載。添加刷新按鈕以列出並讓用戶決定何時刷新。
+0

Eduardo,非常感謝您的意見。我完全同意你的意見。樣品非常有用,我非常感謝任何花時間提交它們的人。我只希望我能找到解釋如何在現實世界和複雜應用程序中做事的人。我做了想要的代碼,只是我指向正確的方向。 – Tim 2009-11-06 14:39:59

1

我開源一個sample framework called SoapBox Core與MVVM做WPF(也使其擴展與MEF)。如果你忽略MEF部分,關於如何做你正在談論的內容,有幾個好主意。我將特別關注一下Options對話框的工作原理,因爲它解決了Eduardo指出的問題(你如何處理編輯某些事情,而只是在用戶提交更改時將結果發佈到應用程序的其餘部分)。在這種情況下,它使用.NET中的用戶設置作爲後備存儲,但它可以使用任何你想要的東西,比如實體。

+0

非常感謝,我現在下載並檢查出來。問候 – Tim 2009-11-09 09:17:15