- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试开发一个简单的应用程序来理解 MVVM
但我不太了解它。我读过一些文章,但它们有点不同:
在此示例中, View 不是 ViewController
本身,它是一个包含 view
所有细节的类,并且是 的抽象VC
。ViewController
创建 ViewModel
并使用它从数据库、网络检索的一些数据......ViewController
与 model
对话并管理 ViewModel
以更新 view
。
ViewController is the view MVVM
在这个例子中,viewController
就是 View ,它不需要其他类。 viewModel
不是由 viewController 创建的,下一个 ViewController
的 ViewModel
是由 ViewModel
创建的。 ViewModel
也有一个 Model
的实例,所以如果它需要检索一些数据,它有 DB、Network..有些东西我不是很明白。如果 viewModel
正在使用异步任务从网络中检索数据,并且我想显示一个微调器并获取数据以实现 View 。我应该使用 blocks
、KVO
还是 delegates
?如果我使用 delegates
,view
实现 ViewModelDelegate
方法,这样对吗?我是否将 view
与 viewModel
相结合?我现在很困惑。
如果我有一个 firstViewModel
为新推送的 SecondViewController
创建一个新的 secondViewModel
,并且 FirstViewController
有在用户弹出推送的 SecondViewController
之前更新其 View 。在这种情况下,firstViewModel
必须观察 secondViewModel
并在弹出后通知 firstViewController
的更改,不是吗?
我还有一个关于 ViewController
创建的问题。 ViewControllers
是下一个 ViewControllers 创建的服务员吗?如果我创建一个管理 ViewControllers
创建和导航的对象,我应该将这个对象传递给 viewModels
吗?
我知道它们非常相似,但我对应该采用哪种方式以及如何实现感到困惑。关于 iOS
MVVM
的信息和例子不多。
我还没有使用 Reactive Cocoa
因为我想先很好地理解这个模式。尽管它在我的待办事项列表中。
谢谢!
最佳答案
这实际上取决于您使用 MVVM 的原因。实际上,我是在你提到的两个案例中间做的。以下是使用 MVVM 的两个原因:
首先,您可能正在使用 MVVM,因为您希望以一种将逻辑从 VC 中拉出并保持其清洁的方式来组织代码。在这种情况下,您使用的是良好的 OOP 形式的 ViewModel,并且非常适合让 VC 创建它。
另一方面,您可能打算对您的 VC 进行 UI 测试,因此想要引入模拟 ViewModel。在这种情况下,您希望将 ViewModel 交给 VC。 (即依赖注入(inject))
在我看来,两者都有道理。您甚至可能在一个应用程序中有多种需求。因此,我保持灵 active 。我的方法是在 VC 的 viewDidLoad() 方法中创建 VM only if 它尚不存在。这允许我使用我的普通 VM 并在我的 VC 中(巧妙地)创建它,但如果我需要覆盖它(单元测试、UI 测试、替代 View 样式),我也可以。
关于ios - 谁应该在 iOS MVVM 中创建 ViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29503067/
Glenn Block 和我一直在研究 ViewModel 模式。我们一直在尝试找出与该模式相关的最大痛点,目标是添加框架支持以减轻痛苦。 今晚,格伦发帖,“View Model” – the mov
如果我使用 Views 创建 ViewModel 实例且 ViewModel 没有对 View 的引用的方法,我不知道创建 viewmodel 关系的正确方法是什么。 假设我们有 ChildView
当从缓存中重新加载 ViewModel 时,我需要能够拦截框架并执行重新初始化。由于没有重新创建 ViewModel,我既不能使用 Init()、MvxViewModel.InitFromBundle
我的业务模型(实际上它用于使用 Entity Framework 6 读取数据)看起来像: class Profile : NameDescriptionBase { public virtu
我在swift中玩MVVM遇到了这种情况:我为 tableView 创建了模型,其中包含对象列表和对象计数。有点像 class TableViewViewModel { var count :
我正在研究由以下部分组成的应用程序区域: Explorer - 包含 TreeView PropertyInspector - 包含一个 PropertyGrid 编辑器 - 包含一个 Explore
我正在使用 MVVM-Light,并且我有一个列出了销售人员的 DataGrid 工作。用户可以双击打开一个子窗口,该窗口将在网格上列出他们的销售,用户将能够在该网格下填写一些文本框以添加新的销售。
是否有适当的方法来创建包含 subViewModel 的 C#/WPF ViewModel ? 目标是: 我有一个主窗口。该窗口用于读取/创建图像。窗口上有一个按钮,可以在 2 个 UserContr
首先,如果这很简单,我必须道歉。我对 WPF 和 MVVM 非常陌生,我想确保我没有违反任何 WPF 或 MVVM 概念。此外,对于下面的冗长解释(试图提供所有细节): 我目前正在引用具有所有业务逻辑
我有一个架构问题,以及一个我想提出意见的可能解决方案。 我习惯于 WP7 的 MVVM 架构(尽可能但不幸的是,有时 sdk 似乎朝着相反的方向发展)。 WP7 强制采用 ViewFirst 方法,我
鉴于以下情况: ViewModelA 启动 ViewModelB(当然,通过一个通用 Controller ,它使用 Ioc 和 DI 来解析所需的类型)。 ViewModelB 需要在 ViewMo
在我的 WPF MVVM 应用程序中,使用 Caliburn.Micro,我有一个 ViewModel,CreateServiceViewModel,在单击按钮时,它会在单独的窗口中打开一个 Grid
假设我有一个采用特定 ViewModel 的页面( View ): @model IEnumerable 在这个页面中,我有一个通过另一个 ViewModel(我们称之为 PostModel)发布数据
我有两个相似的 ViewModel,我需要将一个转换为另一个。 这是第一个: using System; using System.Collections.Generic; using System.
我有两个 View 共享来自某个 View 模型的一个可观察集合,但具有不同的 Collection View 参数。在 MVVM Light 中实现它的正确方法是什么?是否支持非静态虚拟机?我如何管
我有 2 个 View 模型 - 主视图模型** 存储 View 模型 StorageViewModel.kt class StorageViewModel @ViewModelInject cons
我有一个 AddressesViewModel 保存用户最喜欢的地址,另一个 SearchViewModel 保存搜索到的地址。当用户搜索地址时,我必须通过检查收藏夹数组来检查该地址是否是收藏夹。正确
首先,我看过this post并没有找到我的问题的答案。 我不确定这是否是汇总 型号 类或聚合 查看型号 类,但这就是我所拥有的: 在我的 WPF(使用 Prism)应用程序中,我有一个 View “
我的 View 中有这些过滤器,它们都会更新 FilterViewModel,然后由它负责过滤数据。其中一个 View ,SearchAddressView 需要 PlacemarkViewModel
依赖的 ViewModel 通过构造函数(IoC 容器)注入(inject)。 示例:ProductSelectionViewModel 使用 ShoppingBasketViewModel。 这是一
我是一名优秀的程序员,十分优秀!