2012-11-20 30 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的一个好主意。