2012-11-20 29 views
2

似乎Web應用程序的參考實現是RacoonBlog,但我找不到WPF/SL的例子。其根本區別在於ViewModel的生命週期和數據更改的粗糙程度 - 它們通常是按每個屬性而不是每個對象發生的。我見過的幾個例子都使用了我急於避免的Repository模式。RavenDB與WPF/Caliburn.Micro

是否有這樣的事情的推薦做法?我應該用一個引用DocumentStore的基礎VM並保存所有內容(由PropertyChanged事件觸發)?

回答

1

首先考慮是否應該直接與數據庫交談,或者不要從客戶端進行交談。在許多情況下,無論數據庫技術如何,您都希望讓客戶端與中介服務器(WebAPI,ServiceStack,WCF或其他)通信。

然後,如果您決定確實想直接與數據庫交談,則具體內容與其他代碼中的相同。

  1. 只有一個DocumentStore實例應該在運行時存在。
  2. 您應該爲用戶的每個活動打開和關閉一個新的DocumentSession。

如果您的用戶界面是粗粒度的,那麼您可能正在存儲/更新會話中的整個實體。如果你的用戶界面是細粒度的(例如:基於任務的用戶界面),那麼你將在每個會話中做得更少,並且你將擁有更多的用戶。

另一種選擇是使用烏鴉的Patching API執行部分更新,但通常不需要或不需要。您會失去事務和併發異常,以獲得更少的通信量。

您應該考慮如何處理併發問題。 Optimistic Concurrency可能是一個好主意,但一定要用重試邏輯處理異常。

當你來自SL時,你將需要使用async session operations,也可能是WPF的一個好主意。