使用第一响应者而不是将方法链接到控制器层次结构中是否是好的应用程序设计?

Is it good App design to use first responder instead of chaining methods down the controller hierarchy?

这个问题是针对 OSX 应用程序的,但同样的原则也适用于 iOS。

我在故事板上有一个 NSWindowController,设置如下。

A. MainWindowController 有子视图:

1) 带有按钮的工具栏

2) 一个 SubVcA viewController 有自己的内容

B. SubVcA的内容,SubVcB viewController的观点

C. SubVcB 有函数 ButtonPressed

目标是通过单击工具栏按钮触发 SubVcB viewController 中的按钮按下功能。

我一直这样做的方式是从 mainWindowController 到目标 viewController 有一个方法实现链,如下所示:

MainWindowController call method on SubVcA
-->SubVcA call method on SubVcB
---> SubVcB call method buttonPressed

这行得通,但是当控制器堆栈达到大约 4 层深时,它会变得混乱。 它也变得更加混乱,当 SubVC(B) 必须将数据发送回 MainWindowController 时,因为为了进行封装(如不让 SubVC(B) 有太多关于其调用的信息 viewControllers),我必须在链中实现委托方法。当您有多个工具栏按钮时,它会变得更加混乱。

现在...我刚刚开始摆弄 Storyboard 上的 firstResponder 项目

而且我意识到它会弹出一个巨大的列表,其中列出了在整个应用程序中使用 -(IBAction) 实现的所有方法。

所以我现在的问题是: 为了减少方法在视图层次结构中的上下混乱,简单地将 MainWindowController 的工具栏按钮操作连接到 SubVc(B) viewController 中使用 firstResponder 对象的 buttonPressed 方法是否是一个好的应用程序设计故事板?

此外,还有其他设计模式可以减少混乱吗?

使用第一响应者允许无针对性的操作向上渗透到响应者链中的任何人可以处理它是第一响应者完全的目的。这显然比 亲自传递消息要简单得多。