保持模型和用户界面同步的选项(在桌面应用程序环境中)
根据我的经验,当尝试保持模型和用户界面同步时,我只有2种模式适用于大型桌面应用程序开发。保持模型和用户界面同步的选项(在桌面应用程序环境中)
1-通过共享事件总线命令对象的事件总线方法被触发(即:UserDemographicsUpdatedEvent),并且如果它们绑定到在此事件中更新的相同用户对象,则UI的各个部分都会更新。
2-尝试将UI直接绑定到模型,并根据需要将侦听器添加到模型本身。我发现这种方法相当笨拙,因为它污染了领域模型。
有没有人有其他建议?在一个类似于JSP的Web应用程序中,绑定到模型是很容易的,因为在请求进入时你只关心模型的状态,而不是在桌面类型的应用程序中。
任何想法?
我目前正在使用事件总线方法来同步模型和应用程序中的用户界面,但我遇到了一个障碍,因为很难使它非常细化,例如,在属性级别你只是想知道对象的属性x
是否得到更新,并且有成百上千的这种情况。
对于这样的细粒度控制,您可能想要检查KVC(Key Value Coding)和KVO(Key Value observing)在可可中的工作方式。它基本上允许对象观察任何其他对象的属性,只要它使用KVC的一些基本原则即可。感兴趣的对象会在更改时自动得到通知,并且您不必在每次更改属性时明确通知观察对象,因为KVO的基础实施将关注这些对象。它有点类似于Java bean中的PropertyChange监听器。
如果发生太多的观察,并且编写胶水代码来更新属性更改的模型/视图会出现问题,您可能需要更进一步,并让data-binding保持模型和视图的同步。基于KVO的概念构建,其思想是绑定对象的属性,以便更改对象的属性,反之亦然。例如,您可以将SO的答案字段中的文本绑定到我们在下面看到的答案预览。
.bind('answer.value', 'answerPreview.text')
两个碰巧是在这种情况下视图元素,所以数据绑定是一个通用的方法,并且可以用于更适当地结合的对象和不只是与模型的用户界面。