gpt4 book ai didi

ios - MVVM 和 iOS - 缺失的规则

转载 作者:行者123 更新时间:2023-11-29 00:09:02 28 4
gpt4 key购买 nike

我现在使用 MVVM 和 Swift 工作了一段时间。原理很简单:

  1. ViewController 负责View
  2. ViewModel 负责Model
  3. ViewController 拥有 View
  4. ViewController 拥有 ViewModel
  5. ViewModel 拥有 Model

期间。

这对我来说很清楚。但是我仍然有一些问题(它们可能听起来很愚蠢,但对新手来说就像上面的规则一样清楚很重要):

  1. ViewModel 应该负责业务逻辑吗?我的意思是,由于 ViewController 不拥有模型,因此将业务逻辑放在 ViewModel 中感觉是正确的;
  2. ViewModel 应该是一个结构吗?这是一个棘手的问题。我猜想 ViewModel 还应该为 ViewController 提供一个 API 来与数据交互。因此,有时我们需要使用一些 escaping closures 以获取异步数据(例如 HTTP 调用)。结构无法容纳它。
  3. 我应该从 ViewController 中隐藏非导出变量吗?有时我们需要对某些属性的强引用才能呈现 View (例如,保留 UIPageControl 的当前页面). ViewController 应该持有这个引用吗?
  4. 我如何从 ViewModel 触发 ViewController 更新?我确实读过 reactive programming ,但我的问题更广泛:有时 ViewModel 需要 ViewController 来响应某些操作,这是最好的方法吗? ViewModel 是否应该保留对 ViewController 可以处理的特定 react 的特定回调?我遇到了Srdan Rasic's post关于“绑定(bind)”属性,我感到困惑(也许它与这个问题根本无关)。

如果你们能分享您的解决方案,我会很高兴。谢谢!

最佳答案

你的问题很广泛。肯定有人会比我解释得更广泛,或者可能有不同的看法。但这些是我的观察:

1. 是的,ViewModel 应该是处理业务逻辑的唯一组件

2. 我猜你自己回答了,应该是class .我没有任何理由为什么它应该是struct .但如果它符合您的需求,我会说谁。

3. 取决于用途。如果您将它用于 View 目的,那么将它放在这里是可以的。还有一个概念是为较小的部分使用单独的 ViewModel,不幸的是,不知道这个名字。我的意思是你有一个用于整个 View 的主 ViewModel 和用于 subview 的 subViewModel。所以你最终不会在 ViewModel 中得到一大堆代码。 .有时它也是可以接受的技术债务(希望不会因为这样说而杀了我)

4. 事情是这样的。您将按下按钮,您将调用 ViewModel 中的方法。称为 buttonPressed (或触发事件)。那么你的ViewModel将完成其工作,可能会获取新数据并为其设置 View 。据我所见,您可能会通过对 View 的弱引用来做到这一点在你的ViewModel ,或在您的 View 中绑定(bind) react 属性。第二个选项会让你不需要View。在你的ViewModel , 但您必须为 ViewModel 中的每个 View 设置属性注册观察者.

关于ios - MVVM 和 iOS - 缺失的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47122124/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com