objective-c – 使用Interface Builder,NSObjectController子类和绑定时,在模型和视图之间插入控制器逻辑

概述在使用IB,NSObjectController子类和绑定时,我一直在努力理解插入​​控制器逻辑的最佳方法. 我需要在模型和视图之间插入控制器逻辑,我很难找到一种优雅的方法.是的,您可以将 *** 作发送给文件所有者并处理其中的控制器逻辑,但是当某些核心数据模型可以扩展到具有深层关系结构的50个实体或更多实体时,这将开始加载到令人难以置信的锅炉板代码量. 一个非常简单的例子是这样的;想象你有一个具有四个字 在使用IB,NSObjectController子类和绑定时,我一直在努力理解插入​​控制器逻辑的最佳方法.

我需要在模型和视图之间插入控制器逻辑,我很难找到一种优雅的方法.是的,您可以将 *** 作发送给文件所有者并处理其中的控制器逻辑,但是当某些核心数据模型可以扩展到具有深层关系结构的50个实体或更多实体时,这将开始加载到令人难以置信的锅炉板代码量.

一个非常简单的例子是这样的;想象你有一个具有四个字符串属性的实体myTextWinter,myTextSpring,myTextSummer,myTextAutumn.你有一个通过NSObjectController连接到IB的视图.现在,假设用户可以通过选择菜单中的春,夏,秋,冬来选择他们希望查看的“季节” – 当选择该季节时,我想显示适当的季节文本.

在这个简化的例子中,我可以获取NSdocument子类中的对象,创建一个名为mySeasonText的属性,我在视图中绑定它,然后检查我的NSUserDefaults以获取适当的季节并将请求路由到模型中的相应属性.

问题来自于我有50个实体,有些实体有两个,三个或更多的关系,每个实体都有自己的季节特定文本属性集,我希望在从Season菜单中选择时切换.或者如果我将一堆nsarray控制器链接在一起以访问更深层次的对象.

到目前为止,我一直在做以下事情;在我的每个模型对象中添加一个名为’mySeasonText’的属性,然后从我的控制器设置中获取设置,并路由到适当的季节.每当选择菜单中的新项目时,我都会刷新这些对象.

虽然这有效并消除了绝对大量的样板代码,但我的控制器逻辑现在已经在我的模型中了.

肯定有更好的办法!有人可以指点我正确的方向吗?

解决方法 这是一个棘手的话题. Apple甚至在自己的文档中提到了这些挑战:

By using the bindings technology,you can easily create a Cocoa MVC application whose vIEws directly observe model objects to receive notifications of state changes. However,there is a theoretical problem with this design. VIEw objects and model objects should be the most reusable objects in an application. […] Design-wise,it’s best to keep model and vIEw objects separate from each other,because that enhances their reusability.

您正在寻找的设计模式是Mediating Controller – 一种使用cocoa-bindings类插入控制器逻辑的方法:

Mediating controllers are typically ready-made objects that you drag from the Interface Builder library. You can configure [Mediating controllers] to establish the bindings between propertIEs of vIEw objects and propertIEs of the controller object,and then between those controller propertIEs and specific propertIEs of a model object. As a result,when users change a value displayed in a vIEw object,the new value is automatically communicated to a model object for storage—via the mediating controller; and when a property of a model changes its value,that change is communicated to a vIEw for display.

以下是我想要的方式:你有没有看过两个角色需要谈论的电影或电视节目,但他们不会说任何相同的语言?他们找到了其他人(或喜剧中的另外5个人),每个人都有一种共同的语言,他们通过玩一个巨大的翻译电话进行交流.

中介控制器有点像那样.

随着应用程序的增长,他们将学习所有关于在这一个视图中查找这一事物的超级特定规则.这是应用程序需要运行的代码类型,但是当您放入模型时,您确实觉得它很讨厌.

对于几个具体而详细的示例,Apple提供了这个非常详细的文档:Bindings Message Flow.

有关此和相关MVC绑定的一些非常好的讨论,请参阅:

> MVC and cocoa bindings best practices question
> Why use NSObjectController?
> Replacing model objects using an NSArrayController

总结

以上是内存溢出为你收集整理的objective-c – 使用Interface Builder,NSObjectController子类和绑定时,在模型和视图之间插入控制器逻辑全部内容,希望文章能够帮你解决objective-c – 使用Interface Builder,NSObjectController子类和绑定时,在模型和视图之间插入控制器逻辑所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1010097.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存