通过服务保存时如何保持模型一致?

时间:2010-12-28 02:12:12

标签: wpf wcf oop mvvm synchronization

我正在使用MVVM模式处理客户端/服务器(WPF / WCF)应用程序。

ViewModel上的属性绑定到Model上的属性,以便在更改Model时,更改会立即传播到View。

当用户点击刷新时,服务器上的任何新/已更改数据都会合并到模型中,因此刷新机制运行良好。

如何处理用户编辑和保存属性?这就是我想要发生的事情:

  
      
  1. 用户点击“修改”
  2.   
  3. 用户修改TextBoxes中的值
  4.   
  5. 用户点击“保存”
  6.   
  7. 更改将发送到服务器
  8.   
  9. 如果成功,服务器将返回已合并到的更新项目   模型和UI已更新。
  10.   
  11. 如果不成功,服务器返回错误,模型不会更新。
  12.   

似乎通过使用MVVM,模型在步骤3更新(使步骤5和6冗余),如果服务器上发生错误,则客户端上的数据与服务器不一致。

有没有最好的做法来处理这种情况?

3 个答案:

答案 0 :(得分:0)

我们处理此方式存储了原始数据的副本。 每当更新失败时,我们都会将原始数据恢复到视图中。

答案 1 :(得分:0)

我提出的解决方案是创建第二组对象 - ModelUpdates。

当用户单击 Edit 时,将实例化ModelUpdate对象(具有与Model对象相同的属性),并将DataContext切换到该对象。

当用户单击保存时,ModelUpdate对象的详细信息将发送到该服务。该服务响应有关更新对象的详细信息,然后将其合并到模型存储库中。

这意味着模型只会使用已成功保存的数据进行更新。如果对象保存不正确,数据库版本将被发送回客户端。如果保存时发生错误,数据库版本将被发送回客户端。如果服务器不可用,客户端将保留预编辑版本。

答案 2 :(得分:-1)

我认为应该使用同步后置方法 这样,如果发生错误,模型和视图侧是相同的。此外,在获取保存的数据之前,您的视图不会更新。

简单来说:

1)用户点击编辑
2)用户进行更改
3)用户点击保存
3.1)应用程序将数据汇总到模型中 3.2)模型保存更改
3.3)模型返回变更数据
4)使用成功(已更改的数据)或失败的消息查看更改。