【发布时间】:2014-09-23 21:08:49
【问题描述】:
我有一个连接到远程后端的 WPF 应用程序:用户可以在 GUI 上编辑许多不同的元素,但只在应用程序关闭时决定保存或丢弃。 GUI 支持撤消/重做。
我已经跟踪每个编辑,并在保存时生成必要的命令以在后端执行编辑:我的命令类似于:
public class ChangeDescriptionOfTypeAObject
{
public string OldValue{ get; set; }
public string NewValue{ get; set; }
public string ObjectID{ get; set; }
}
这在当前应用程序中有效,但我正在考虑如果另一个用户同时更改相同的属性,命令会失败。可能我必须向用户发送一条消息“无法应用对象 ObjectID 上的描述更改:当前值为 xxx”并应用所有其他更改。
这是正确的方法吗? 如果我用来检查“CurrentValue==OldValue”的读取模型正在从另一个消费者更新,我如何确保可以在最终一致的过程中成功应用命令?
【问题讨论】:
-
我认为这取决于 - IMO 最好的方法是使 events 和 commands 比你所做的更小,并带来某种并发检查使用它们(通常只是一个版本号)-然后在更新之前,您可以再次重新查询当前状态,如果所有其他方法都失败,后端会给您一个并发检查-我认为如果没有某种锁,您真的不能避免这种情况
-
为了更清楚一点:后端必须检查一致性! (前端也可以检查,但后端必须说了算)