gpt4 book ai didi

c# - 查看模型我们是检查 setter 中的相等性,还是总是设置和通知?

转载 作者:行者123 更新时间:2023-12-03 10:30:26 27 4
gpt4 key购买 nike

我无法找到关于这个主题的讨论,但我认为它非常重要,所以它存在的可能性很大,所以我很乐意阅读。

在我们的 View 模型属性 setter 中,我们可以检查提供的值是否等于当前值,并且只在这种情况下通知,或者我们可以忽略检查并立即设置和通知。

虽然此检查看起来很令人愉悦,因为它在 VM 上的“刷新”不会导致 View 重绘时节省了一些资源,但当 View 稍微复杂一些并且后面有一些代码无法放入 VM 时,它也会产生一些不良影响或者与将其放在 View 中相比,将其放入 VM 太难了。

所以一般来说,根据我对 MVVM 的经验,我可以想到当这个检查阻止某些代码按预期工作时的场景。所以目前我认为这个检查是一件危险的事情,有时通常不值得节省重绘的好处。

此外,有时这种检查可以用作更好的程序逻辑的替代品,例如 VM 上有 2 个属性实际上是紧密相连的,比如某个实体的字符串和对象表示。因此,当例如设置一个字符串时,如果验证正确,它内部也会调用一个对象 setter ,并且这种相等性检查可以避免对象 <-> 字符串 setter 的无限循环的情况,但在这种情况下,我认为引入一个标志要好得多这是在 setter 中检查的,如果不需要,则不会调用另一个,当调用说 object setter 来自对 string setter 的调用时。

我认为这个检查主要用于我刚才描述的场景,我认为这并不是执行检查的好理由。

那么我们应该如何编写我们的 setter 呢?

编辑:只是给出一个场景,最简单和最愚蠢的一个是这样的:如果我们有一个从 VM 到 View 的 OneWay 绑定(bind),并且由于某种原因在 View 代码隐藏中存在一些处理程序,它直接更改 View,导致它变得不同步使用 VM,刷新 VM 将无济于事。当然很明显,在这种情况下我们应该调用绑定(bind)的 VM setter,但我认为在某些情况下,解决方案变得不那么透明的情况可能会更加复杂和先进。所以场景很愚蠢,但检查会阻止正确的行为。我会更多地考虑一个现实世界的例子,它不是那么容易解决,但可能需要一些时间..

最佳答案

以我个人的经验,我发现这个检查非常有用,我总是将相等检查放在 setter 中,以确保如果不需要刷新绑定(bind)值,那么我不应该调用属性更改,也不应该强制刷新 View 根本不需要时的值。

谈到平等检查给您带来麻烦的场景,我认为场景中一定有一些奇怪的东西,或者很可能您可能会错误地接近某些东西,否则我已经使用了很多 MVVM 并且在我的案例中没有找到这样的场景。即使存在不进行相等检查可能有意义的情况,我也不会停止使用相等检查,因为我在少数情况下会遇到一个小问题。我将尝试在那个特殊的有问题的情况下做一些解决方法来避免这个问题,而不是在 setter 中不使用相等检查

关于c# - 查看模型我们是检查 setter 中的相等性,还是总是设置和通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6407464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com