如果一个视图有大约10个以上的字段,并且用户更改了其中几个字段的值,我需要识别更改的值并仅更新数据库中的这些值。
我能想到的唯一解决方案是加载视图时,克隆视图模型中的所有相关属性并将视图绑定到这些克隆属性。这样,当用户尝试保存更新的值时,我可以将克隆的属性与原始属性进行比较,以查看更改的内容。
我不能只使用MVVM绑定到视图模型中的属性,因为我不知道执行save命令时随时间发生了什么变化。
有没有更好/更优雅的方法来处理这个问题?
答案 0 :(得分:1)
在处理事件采购时,你可以结合一些关于ud和ddd空间中着名的事物的想法。
对模型进行成像是一系列事件。所以你得到了一个持有状态的模型,但每次发生变化时都会构建。优点是你不仅知道你当前的状态,你也知道你来自哪里,你可以再次重播每个州(如果你保存事件)。
所以把它想象成一个银行账户。您不会仅看到将历史记录视为交易的余额。
我认为双向绑定在这里不起作用,但你应该绑定到你的状态对象,然后点击(或关注)你添加CustomerMoved
或TitleRenamed
之类的事件(与一旦发生事件,您将更改的状态(结果是更新的状态对象)。每当更新状态对象时,您应该触发NotifiedChanged
,因此UI将代表新状态。
我不知道你是否有意义,或者这是一种矫枉过正?优势是当您存储域事件时,您将记录完美的审计跟踪。这是一种不同的心态,但根据您的使用情况,它可以提供帮助。
我建议您阅读事件采购或cqrs。请记住,这些模式不是黑色或白色的决定。无论什么适合你,你都可以从中取出零件......
HTH