我面临着一个复杂的设计问题。由于硬设计的图形,我无法将 Apple 导航模式用作 UINavigationController
或其他的。
这是应用图
黑色箭头:协议(protocol)方向
蓝色箭头:父子模式方向
我创建了这个流程是因为我想在单个 ViewController
中维护代码。清晰和孤立:我认为它们是 模块 它们可以在其他应用程序的某个地方使用。RootViewController
是 MainVCs
职位经理。它决定哪个是当前必须显示的 View Controller ,并根据其状态(由委托(delegate)方法修改)对其进行配置。
单MainVC
不知道RootVC
存在,它使用协议(protocol)调用 Root。单ChildViewController
不知道它的MainVC
存在,它使用协议(protocol)等调用 Main。
代码清晰易懂,这是我的目的,但是当我必须从 RootVC
对骨架( ChildViewControllerN
)进行修改时,无数的 child ChildViewController
,无数的 child MainViewController
,我必须传播协议(protocol)直到 RootViewController
.
我的第一个问题是 : 这个模式对吗?你怎么看待这件事?
我的第二个问题是 : 是否有一个限制点,我没有使用委托(delegate)模式,但类似于 KVO
?
添加
我读了一篇关于 composite pattern
的大学讲座。它说:
A composite object knows its contained components, that is, its children. Should components maintain a reference to their parent component? Depends on application, but having these references supports the Chain of Responsibility pattern
因此,根据链,我可以维护父级的引用,但我必须为这种引用声明一个自定义接口(interface)。但是,这样做我会减少协议(protocol)的数量,但 第二个问题仍未解答
最佳答案
观点:
当我超越单一级别的父/子关系时,我倾向于停止使用委托(delegate)并转向 NSNotification
.我经常去直接至NSNotification
减少依赖。我更喜欢 KVO,因为它是显式的,而随着项目的进展,KVO 更难调试。
(例如:如果在分配时刻和 KVO 交付之间在主线程上释放了监听器,那么后台线程上看似简单的变量分配会导致难以诊断的崩溃。)
关于ios - 海量父子模式和委托(delegate)模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31069875/