2

似乎 Web 应用程序的参考实现是 RacoonBlog,但我很难找到使用 WPF/SL 的示例。根本区别在于 ViewModel 的生命周期和数据更改的粗糙度——它们通常发生在每个属性而不是每个对象上。我见过的几个例子使用了我很想避免的存储库模式。

对于此类事情,是否有推荐的做法?我是否应该使用 DocumentStore 的引用创建一个基础 VM 并将所有内容保存在那里(由 PropertyChanged 事件触发)?

4

1 回答 1

1

首先考虑您是否应该直接与数据库交谈,或者不与您的客户交谈。在许多情况下,无论使用哪种数据库技术,您都希望让客户端与中间人对话,例如服务层(WebAPI、ServiceStack、WCF 或其他)。

然后,如果您决定确实想直接与数据库对话,具体细节与其他代码中的相同。

  1. 在运行时应该只存在一个 DocumentStore 实例。
  2. 您应该为每个用户的活动打开和关闭一个新的 DocumentSession。

如果您的 UI 是粗粒度的,那么您可能会在会话中存储/更新整个实体。如果您的 UI 是细粒度的(例如:基于任务的 UI),那么您将在每个会话中做更少的事情,而您将拥有更多。

另一种选择是使用 raven 的Patching API来执行部分更新,但通常不需要或不需要它。您丢失事务和并发异常只是为了减少线路流量。

您应该考虑如何处理并发问题。 乐观并发可能是一个好主意,但请务必使用重试逻辑处理异常。

当您来自 SL 时,您将需要使用异步会话操作,这对于 WPF 也可能是一个好主意。

于 2012-11-20T16:23:55.283 回答