如何通过MVC模式中的视图通知其他视图?
我已经阅读了一些关于MVC模式的文档,然后将它用在了桌面软件中。 该软件有很多GUI。 当我编写第一个GUI时,我使用MVC模式将它分成3部分。 这很简单明了。 但是当我在这个软件中添加另一个GUI时,我对此感到困惑:
两种观点必须相互沟通。 当我在第一个视图(AView)中单击一个按钮时,第二个视图(BView)将被更改。 当我点击BView中的按钮时,AView将被更改。 如何使用MVC模式通知对方? 应该AView的控制器(AController)是否拥有BController的引用?
另一个问题。 如果视图嵌套,子视图如何通知它的父项? 在一些文章中有人说,嵌套视图应该使用复合模式。 父母有责任通知其子女,但不能撤销。 孩子是否应该持有父母的参考? 并没有控制器通知对方?
最后一个问题是创建实例的位置。 一般而言,控制器将保存视图和模型的参考。 因此,在控制器中创建视图和模型的实例是合理的。 但是如果视图嵌套,父视图将创建子视图。 子控制器如何获取子视图? 子控制器是否应该保存父视图的引用? 我认为所有这些都是不必要的参考。