实现 MVC 模式

Posted

技术标签:

【中文标题】实现 MVC 模式【英文标题】:Implementing the MVC pattern 【发布时间】:2016-09-30 00:51:07 【问题描述】:

我在使用 Swift 在 ios 中时遇到问题。根据 Apple 文档,有一个 MVC 模式:

我对此很好,但正如您所见,当模型自身发生变化时(例如,来自套接字的传入消息)它应该如何通知控制器?

例如,我有一个聊天应用程序,其模型表示消息列表。当模型收到新消息时,它如何通知控制器?有没有传统的方法可以做到这一点?

谢谢

【问题讨论】:

最常见的两种方式是委托和使用 NSNotifications @Paulw11 是的,工作完美,看起来很漂亮,谢谢! 键值观察 (kvo) 也是解决这个问题的一个令人信服的方法。 NSHipster 有一篇较旧但仍然很有趣的文章:nshipster.com/key-value-observing 同意@Paulw11....此外,如果有多个相关方的潜力,通知会更加灵活。委托通常意味着一对一的依赖关系,这种依赖关系只是理论上抽象出来的。 (也有 KVO,但说得越少越好,也许。:)) 【参考方案1】:

您可以通过两种方式实现此模型 - 控制器通信。

    委托模式 通知 (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/index.html)

关于详细解释,我建议您观看 CS 193p MVC 讲座。 (https://www.youtube.com/watch?v=Cb8KtEI3ZaY)

【讨论】:

【参考方案2】:

层之间的通信是一个非常有趣的话题,并且不仅仅是一个方法列表。

这里是a very relevant article from objc.io,它不仅有一个详尽的沟通方法列表,还分析了它们的优缺点,并提出了一个流程图来帮助你决定哪种方法是最好的。

在您的情况下,模型是发送者,控制器是接收者。通常,控制器持有模型,因此控制器知道模型,但模型不知道控制器。因此,您将位于图表的下部。

请阅读全文。它还包含来自 Apple 框架的示例。这真的很有用。

【讨论】:

以上是关于实现 MVC 模式的主要内容,如果未能解决你的问题,请参考以下文章

实现 MVC 模式

mvc 模式 与各部分的实现

MVC设计模式思想及简单实现

在我的情况下,springBoot 是不是实现了 MVC 模式?

MVC 模式是不是实现了 Web 框架的常见任务?

观察者模式的应用:模拟MVC架构的实现