我没能找到关于这一主题的讨论,但我认为它很重要,那里有它的存在,所以生病是gladful读一个很大的机会。查看模型我们是否检查setters中的等式,还是只设置&always always?
在我们的属性viewmodel setter中,我们可以检查提供的值是否等于当前值,并且只在这种情况下通知,或者我们可以忽略该检查并立即设置通知&。
虽然此检查看起来令人愉快,因为它节省了一些资源,当VM上的“刷新”不会导致View重绘时,它也可能会带来一些不好的影响,当View稍微复杂一些,放入虚拟机或将其放入虚拟机中与将其保留在View中相比太困难了。
所以一般我与MVVM经验时,该检查按预期工作防止一些代码,我能想到的情景。所以目前我认为这个检查是一件危险的事情,有时候通常不值得使用挽救重绘。
此外,有时候这种检查可以用来替代更好的程序逻辑,例如在VM上有2个属性实际上是紧密连接的,比如字符串&某个实体的对象表示。所以当你设定例如字符串,它里面调用一个物体设定太多,如果正确验证,而这种平等检查从对象<的无限循环节约的情况 - >串制定者,但在这种情况下,我认为它要好得多引进一个标志这是在setter中检查的,如果不需要时不调用另一个,当调用对象设置器来自调用字符串设置器时。
我认为这个检查主要是用于我刚才所描述的,我认为情况是不完全执行检查一个很好的理由。
那么我们应该如何编写我们制定者?
编辑:只是为了给出一个场景,最简单也是最愚蠢的一个会是这样的:如果我们有一个OneWay绑定到View从VM,并且出于某种原因,View代码隐藏中存在一些处理器直接更改View,导致它变得与VM不同步,刷新虚拟机无法帮助。当然很明显,在这种情况下,我们应该调用VM绑定器,但我认为在某些情况下,解决方案变得不那么透明时,情况可能会更加复杂和先进。所以情景是愚蠢的,但有一个检查会阻止正确的行为。我会想更上了一个现实世界的例子在那里它不是那么容易解决,但可能会需要一些时间..
您能描述检查引入问题的情况吗?这听起来似乎有可能是其他奇怪的事情,因为它是一个问题。 –
我可以阅读这个作为“使用检查”的答案吗?:)让我想一下例子虽然.. –
不一定,但我肯定会说,如果检查导致问题,这是一个引起关注的原因*为了这个问题。 –