【问题标题】:iOS MVVM: Is Delegation Pattern a Requirement?iOS MVVM:委托模式是必需的吗?
【发布时间】:2017-06-14 11:36:25
【问题描述】:

首先,为 iOS 研究 MVVM 是一件令人头疼的事情,因为网上有多种不同的实现。到目前为止,我发现了 3 类 MVVM:

  1. 使用委派/协议更新 ViewController/View 的 MVVM
  2. MVVM 与 ReactiveCocoa 之类的 KVO 绑定
  3. MVVM 作为模型的简单帮助器/包装器类(无协议,无 KVO)

在 iOS 中实现 MVVM 是否需要委托模式或 KVO?

我在网上看到了许多 MVVM 示例,它们没有使用协议/委托,而是仅使用 MVVM 作为辅助类来封装模型并向 ViewController 提供状态。

这仍然被认为是 MVVM 吗?

【问题讨论】:

  • MVVM 绝对不是 Apple 在创建 Cocoa Touch 时的想法。 Apple dox 专门教授 MVC 是有原因的。在 iOS 中,MVVM 解决了什么问题?第一个答案总是一个大视图控制器。但为什么这是个问题?它不是。通过将对象数量加倍并创建数量惊人的观察者和视图扩展来修剪一个“大”对象并不是解决方案。 MVVM 是一种内存占用者,而内存是应用程序开发中最有价值的资源。如果 Apple 希望开发人员能够双向绑定所有内容,那么 Swift 至少会将其作为原生功能。

标签: ios mvvm delegates key-value-observing delegation


【解决方案1】:

我完全同意你的观点,在互联网上正确理解 MVVM 确实是一项痛苦的工作,因为每个人都有自己的实现,我和你的情况一样。

只要您不违反以下规则,您采用哪种方法来实施 MVVM 并不重要:

查看:

  1. 拥有模型视图
  2. 管理视图周期。
  3. 处理用户交互并将操作传递给 ModelView。

模型视图:

  1. 它拥有模型
  2. 执行所有业务操作。
  3. 通知查看更新

型号:

  1. 它会通知 ModelView 有更新。

因此,根据上述规则,您可以选择第 1 点或第 2 点,因为此处不适用第 3 点,因为没有绑定或通知您无法实现 MVVM。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    这是我对 MVVM 的看法。

    MVVM 或 MV——无论只是一种架构,都尝试将 viewlogic 分开。它有一些好处,比如增强你的代码可测试性和遵循 SRP 让你的调试更容易......等等。

    另一个关键点,MVVM在View-ModelView之间通信使用data binding,当用户从UI更新值时,值直接更新为View-Model

    正如您所说,实现 MVVM 有多种选择。但是如果选择选项3,如何将View-ModelViewModel 的值绑定到View-Model

    如果使用KVOView可以观察View-Model的 属性,但 View-Model 不需要知道任何关于 View 的信息。

    如果使用委托模式,View-Model 只需要实现View 所需的内容,而无需了解View 的更多信息。

    使用 KVO 或委托模式只是尝试在 View-ModelViewdata binding 之间解耦。

    所以我认为选项 3 没有考虑 MVVM。也许ViewView-Model 之间仍然存在强耦合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多