- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个模型类 Person
与 name
属性(property)。
我也有对应的PersonView
其中包含 NameView
作为其 subview 之一。PersonView
还保留对人(其模型)的引用,以及 NameView
保留对名称(其模型)的引用。
如果我在 PersonView
内,我现在有两种方法可以得到这个名字:要么
self.person.name
self.nameView.name
Family
的一部分。对象,而该对象又被
FamilyView
引用目的。现在有来自
FamilyView
的三个不同路径一直到某个人的名字。随着树的生长,它只会变得更糟。
最佳答案
我认为,在这种情况下,你必须在违反 DRY 或放弃松耦合之间做出选择。我不认为你可以避免两者。
如果 NameView
不包含它自己的数据副本,那么它需要一个指向数据的指针。现在您已经拧紧了联轴器,因为 NameView
不能单独使用。
另一方面,如果 NameView
保留模型数据的副本,那么您就违反了 DRY,您最终可能会遇到同步问题。许多 GUI 框架都有一个“绑定(bind)”概念,可以使模型和 View 之间的值保持同步。
就个人而言,我会选择松耦合加绑定(bind)。如果您使用的绑定(bind)很好,您不应该有任何同步问题。在许多不同的语言和框架中广泛使用绑定(bind)表明这是一种不错的方法。
至于是否使用self.person.name
或 self.nameView.name
,这取决于您是尝试修改模型状态还是 View 状态。如果您要更改模型,则只需更改 self.person.name
. View 应该以某种方式观察模型的变化,并且应该能够相应地更新自己。如果你想更新 GUI 而你不关心模型,那么使用 self.nameView.name
.
关于design-patterns - 不要重复自己的通勤属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11287193/
在 Clojure 中设置 ref 值的 3 种方法有什么区别?我已经多次阅读有关 ref-set、commut 和 alter 的文档。我很困惑在什么时候使用哪些。有人可以向我简要描述一下这些差异是
我是一名优秀的程序员,十分优秀!