gpt4 book ai didi

model-view-controller - 保持模型和 UI 同步的选项(在桌面应用程序上下文中)

转载 作者:行者123 更新时间:2023-12-04 08:24:21 26 4
gpt4 key购买 nike

根据我的经验,在尝试保持模型和 UI 同步时,我只有 2 种模式适用于大型桌面应用程序开发。

1 - 通过共享事件总线命令对象的事件总线方法被触发(即:UserDemographicsUpdatedEvent),如果它们绑定(bind)到在此事件中更新的同一用户对象,则 UI 的各个部分都会更新。

2-尝试将 UI 直接绑定(bind)到模型,根据需要将监听器添加到模型本身。我发现这种方法相当笨拙,因为它污染了领域模型。

还有其他建议吗?在具有 JSP 之类的 Web 应用程序中,绑定(bind)到模型很容易,因为您通常只关心收到请求时模型的状态,而在桌面类型的应用程序中则不然。

有什么想法吗?

最佳答案

我目前正在使用事件总线方法来同步我的应用程序中的模型和 UI,但我遇到了一个障碍,因为很难使其变得非常细粒度,例如,在您所在的属性级别只是想知道对象的属性 x 是否得到更新,并且有成百上千个这样的情况。

对于这样一个细粒度的控件,您可能需要检查 KVC(键值编码)和 KVO 是如何实现的。 (Key Value observing) 在 Cocoa 中有效。它基本上允许一个对象观察任何其他对象的属性,只要它使用 KVC 的一些基本原则。感兴趣的对象会在更改时自动得到通知,并且您不必在每个属性更改时显式通知观察对象,因为这由 KVO 的底层实现负责。它有点类似于 Java bean 中的 PropertyChange 监听器。

如果正在进行的观察太多,并且编写胶水代码来更新属性更改的模型/ View 会出现问题,您可能需要更进一步并拥有 data-binding保持模型和 View 同步。基于 KVO 的概念,其思想是绑定(bind)对象的属性,以便一个对象的更改自动更新另一个对象,反之亦然。例如,您可以将 SO 的答案字段中的文本绑定(bind)到我们在下方看到的答案预览。

.bind('answer.value', 'answerPreview.text')

在这种情况下,两者恰好都是 View 元素,因此数据绑定(bind)是一种通用方法,可用于更适本地绑定(bind)对象,而不仅仅是 UI 与模型。

关于model-view-controller - 保持模型和 UI 同步的选项(在桌面应用程序上下文中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2428761/

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