gpt4 book ai didi

objective-c - MVC 和 cocoa 绑定(bind)最佳实践问题

转载 作者:太空狗 更新时间:2023-10-30 03:50:24 27 4
gpt4 key购买 nike

假设我有一个 View myView、一个 View Controller myViewController 和某种模型对象 myModel。此外,假设该模型有两个符合 KVO 的属性,arrayOfPeopleNamesarrayOfAnimalKinds(均为 NSString)。

在我看来,我希望将两个弹出窗口绑定(bind)到这两个数组的内容。

我的问题是,如果 myController 有对 myModel 的引用,并且下拉列表绑定(bind)到 myViewController,那么按照 myModel.arrayOfPeopleNames 设置键路径是否是一个好习惯?

或者我是否需要在 myViewController 中设置一个额外的 NSArray,它镜像 myModel 中的那个并改为绑定(bind)到该键路径?

从实现的角度来看,前者似乎简单得多(我不必让 Controller 数组镜像模型数组),但我想知道它是否将模型暴露给 View 。

意见?

最佳答案

您不应该在 Controller 中镜像模型的数组。虽然我不太关心在非常简单的情况下直接绑定(bind)到模型的数组,但您也可以将 UI 对象绑定(bind)到管理模型数组的 NSArrayController。这将提供模型和 UI 之间的分离,更重要的是处理排序、选择、添加和删除对象等任务。

我可以通过担心 KVO 和绑定(bind)违反“纯” Model View Controller 设计来了解您的想法,但这不是您应该担心的事情。即使 KVO 通知直接从模型传递到 View ,设置和更改 View 和模型之间的连接仍然是 Controller 的责任(只是在这种情况下它是通过 IB 完成的)。例如,您不希望模型对象获取对 View 的引用,并将其自身绑定(bind)到 UI,这将是 Controller 的责任。

作为另一个要避免的例子,考虑一下你的模型是否有一组“动物 ID”而不是名称。您可能不想创建一个方法来将模型中的动物 ID 转换为人类可读的动物名称,而是创建一个值转换器或格式化程序来进行转换。这允许您保持模型和 View 之间的分离级别。

另请记住,设计模式的目的是降低编写问题解决方案的复杂性,而不是增加它。您会发现这正是 Cocoa 的工作方式,尽管它可能并不总是遵循最严格的模式定义。

关于objective-c - MVC 和 cocoa 绑定(bind)最佳实践问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/356997/

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