gpt4 book ai didi

design-patterns - 不要重复自己的通勤属性

转载 作者:行者123 更新时间:2023-12-01 05:30:50 28 4
gpt4 key购买 nike

假设我有一个模型类 Personname属性(property)。

我也有对应的PersonView其中包含 NameView作为其 subview 之一。
PersonView还保留对人(其模型)的引用,以及 NameView保留对名称(其模型)的引用。

如果我在 PersonView 内,我现在有两种方法可以得到这个名字:要么

self.person.name

或者
self.nameView.name

所有的引用都是自然的。然而,这似乎违反了 DRY。上述路径应该产生相同的名称。但是,如果某些事情不同步,他们可能不会。

上面的例子比这些事情在实践中往往要简单得多。例如,此人可能是 Family 的一部分。对象,而该对象又被 FamilyView 引用目的。现在有来自 FamilyView 的三个不同路径一直到某个人的名字。随着树的生长,它只会变得更糟。

处理这种情况的最佳方法是什么?

最佳答案

我认为,在这种情况下,你必须在违反 DRY 或放弃松耦合之间做出选择。我不认为你可以避免两者。

如果 NameView不包含它自己的数据副本,那么它需要一个指向数据的指针。现在您已经拧紧了联轴器,因为 NameView不能单独使用。

另一方面,如果 NameView保留模型数据的副本,那么您就违反了 DRY,您最终可能会遇到同步问题。许多 GUI 框架都有一个“绑定(bind)”概念,可以使模型和 View 之间的值保持同步。

就个人而言,我会选择松耦合加绑定(bind)。如果您使用的绑定(bind)很好,您不应该有任何同步问题。在许多不同的语言和框架中广泛使用绑定(bind)表明这是一种不错的方法。

至于是否使用self.person.nameself.nameView.name ,这取决于您是尝试修改模型状态还是 View 状态。如果您要更改模型,则只需更改 self.person.name . View 应该以某种方式观察模型的变化,并且应该能够相应地更新自己。如果你想更新 GUI 而你不关心模型,那么使用 self.nameView.name .

关于design-patterns - 不要重复自己的通勤属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11287193/

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