iOS MVVM:委派模式是一项要求吗?

iOS MVVM: Is Delegation Pattern a Requirement?

首先,研究 iOS 的 MVVM 很头疼,因为网上有多种不同的实现。到目前为止,我找到了 3 类 MVVM:

  1. 使用委托/协议更新 ViewController/视图的 MVVM
  2. 像 ReactiveCocoa 一样带有 KVO 绑定的 MVVM
  3. MVVM 作为模型的简单助手/包装器class(无协议,无 KVO)

委派模式或 KVO 是在 iOS 中实现 MVVM 的要求吗?

我在网上看到了很多 MVVM 示例,它们没有使用协议/委派,而只是使用 MVVM 作为助手 class 来封装模型并向 ViewController.

这仍然被认为是 MVVM 吗?

这是我对 MVVM 的看法。

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

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

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

如果使用KVO View可以观察到View-Model的 属性,但 View-Model 不需要知道任何有关 View.

的信息

如果使用委托模式,View-Model 只需要实现 View 所需的内容,无需了解 View.

使用KVO或者delegate pattern只是尝试解耦View-ModelViewdata binding

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

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

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

查看:

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

模型视图:

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

型号:

  1. 它会在更新时通知 ModelView。

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

希望对您有所帮助。