【发布时间】:2010-12-28 02:12:12
【问题描述】:
我正在使用 MVVM 模式开发客户端/服务器 (WPF/WCF) 应用程序。
ViewModel 上的属性绑定到 Model 上的属性,这样当 Model 发生更改时,更改会立即传播到 View。
当用户点击刷新时,服务器上任何新增/更改的数据都会合并到Model中,因此刷新机制运行良好。
如何处理用户编辑和保存属性?这是我想要发生的事情:
- 用户点击“编辑”
- 用户修改文本框中的值
- 用户点击“保存”
- 更改已发送到服务器
- 如果成功,服务器返回更新的项目,合并到 模型,并且 UI 已更新。
- 如果不成功,服务器返回错误并且模型不更新。
似乎使用MVVM,Model在第3步更新(使第5&6步变得多余),如果服务端出现错误,客户端的数据与服务端不一致。
有处理这种情况的最佳实践方法吗?
【问题讨论】:
-
在您的场景中,服务器上的数据是否可能与特定客户端不同步,而客户端无需执行任何操作?将来有可能吗?我问的原因是您可能需要一种不需要用户重新启动应用程序/手动刷新的同步策略。像这样的问题可能完全符合该策略。您可以在每次保存后简单地进行同步,无论好坏。
-
是的 - 它是一个多用户应用程序,但每当用户查看项目时都会发生刷新,以便客户端是最新的。您的建议是有道理的,但是如果当用户单击“保存”时服务器已关闭,会发生什么情况?我希望恢复原始值(可能转换到离线模式)。
-
部分问题在于您的网络服务 是 模型。远程副本和本地副本都是同一事物的表示。如果您无法远程更新模型,那么您应该在本地更新模型,并做任何您需要做的事情来应对它们不同步的情况。 “每当用户查看项目时都会发生刷新”。如果他们在查看时更新了怎么办?您应该弄清楚如何处理这种情况,以免一个用户意外撤消另一个用户的更改,因为他们碰巧打开了对话框。
-
新的/更改的数据被合并到模型中,传播到视图。
-
@Greg:没问题。如果它没有帮助,它就没有帮助,因此为什么它不是一个答案:)
标签: wpf wcf oop mvvm synchronization