iOS MVVM:委派模式是一项要求吗?
iOS MVVM: Is Delegation Pattern a Requirement?
首先,研究 iOS 的 MVVM 很头疼,因为网上有多种不同的实现。到目前为止,我找到了 3 类 MVVM:
- 使用委托/协议更新 ViewController/视图的 MVVM
- 像 ReactiveCocoa 一样带有 KVO 绑定的 MVVM
- MVVM 作为模型的简单助手/包装器class(无协议,无 KVO)
委派模式或 KVO 是在 iOS 中实现 MVVM 的要求吗?
我在网上看到了很多 MVVM 示例,它们没有使用协议/委派,而只是使用 MVVM 作为助手 class 来封装模型并向 ViewController.
这仍然被认为是 MVVM 吗?
这是我对 MVVM 的看法。
MVVM 或 MV 只是一种架构,尝试将 view 和 logic 分开。它有一些好处,例如增强您的代码可测试性并遵循 SRP 让您的调试更容易......等
另一个关键点,MVVM在View-Model
和View
之间通信使用data binding
,当用户从UI更新值时,值直接更新到View-Model
.
如您所说,实现 MVVM 有多种选择。但是如果你选择选项3,如何将View-Model
的值绑定到View
和Model
到View-Model
的值?
如果使用KVO View
可以观察到View-Model
的
属性,但 View-Model
不需要知道任何有关 View
.
的信息
如果使用委托模式,View-Model
只需要实现 View
所需的内容,无需了解 View
.
使用KVO或者delegate pattern只是尝试解耦View-Model
和View
,data binding
所以我认为选项 3 没有考虑 MVVM。也许 View
和 View-Model
之间仍然存在强耦合。
我完全同意你的看法,在网上正确理解MVVM真的是一件痛苦的工作,因为每个人都有自己的实现,我和你的情况一样。
只要不违反以下规则,采用哪种方法实现 MVVM 并不重要:
查看:
- 拥有模型视图
- 管理查看周期。
- 处理用户交互并将操作传递给 ModelView。
模型视图:
- 它拥有模型
- 执行所有业务操作。
- 它通知查看更新
型号:
- 它会在更新时通知 ModelView。
因此,根据上述规则,您可以选择第 1 点或第 2 点,因为第 3 点在这里不适用,因为如果没有绑定或通知,您将无法实现 MVVM。
希望对您有所帮助。
首先,研究 iOS 的 MVVM 很头疼,因为网上有多种不同的实现。到目前为止,我找到了 3 类 MVVM:
- 使用委托/协议更新 ViewController/视图的 MVVM
- 像 ReactiveCocoa 一样带有 KVO 绑定的 MVVM
- MVVM 作为模型的简单助手/包装器class(无协议,无 KVO)
委派模式或 KVO 是在 iOS 中实现 MVVM 的要求吗?
我在网上看到了很多 MVVM 示例,它们没有使用协议/委派,而只是使用 MVVM 作为助手 class 来封装模型并向 ViewController.
这仍然被认为是 MVVM 吗?
这是我对 MVVM 的看法。
MVVM 或 MV 只是一种架构,尝试将 view 和 logic 分开。它有一些好处,例如增强您的代码可测试性并遵循 SRP 让您的调试更容易......等
另一个关键点,MVVM在View-Model
和View
之间通信使用data binding
,当用户从UI更新值时,值直接更新到View-Model
.
如您所说,实现 MVVM 有多种选择。但是如果你选择选项3,如何将View-Model
的值绑定到View
和Model
到View-Model
的值?
如果使用KVO View
可以观察到View-Model
的
属性,但 View-Model
不需要知道任何有关 View
.
如果使用委托模式,View-Model
只需要实现 View
所需的内容,无需了解 View
.
使用KVO或者delegate pattern只是尝试解耦View-Model
和View
,data binding
所以我认为选项 3 没有考虑 MVVM。也许 View
和 View-Model
之间仍然存在强耦合。
我完全同意你的看法,在网上正确理解MVVM真的是一件痛苦的工作,因为每个人都有自己的实现,我和你的情况一样。
只要不违反以下规则,采用哪种方法实现 MVVM 并不重要:
查看:
- 拥有模型视图
- 管理查看周期。
- 处理用户交互并将操作传递给 ModelView。
模型视图:
- 它拥有模型
- 执行所有业务操作。
- 它通知查看更新
型号:
- 它会在更新时通知 ModelView。
因此,根据上述规则,您可以选择第 1 点或第 2 点,因为第 3 点在这里不适用,因为如果没有绑定或通知,您将无法实现 MVVM。
希望对您有所帮助。