我正在尝试开发一个简单的应用程序来理解MVVM
,但我并没有很好地理解它。我读过一些文章,但它们有点不同:
在此示例中,视图不是ViewController
本身,它是一个包含view
的所有详细信息的类,它是VC
的抽象。
ViewController
创建ViewModel
,其中包含从DB,Network中检索的一些数据。
ViewController
与model
对话并管理ViewModel
以更新view
。
ViewController is the view MVVM
在此示例中,viewController
是视图,它不需要其他类。 viewModel
不是由viewController创建的,而下一个ViewModel
的{{1}}是由ViewController
创建的。 ViewModel
也有ViewModel
的实例,所以如果它需要检索一些数据,它就有DB,Network的实例。
我不太了解一些事情。如果Model
正在使用异步任务从Network检索数据,并且我想显示一个微调器并获取数据以实现视图。我应该使用viewModel
,blocks
还是KVO
?如果我使用delegates
,那么delegates
实现view
方法会是正确的吗?我将ViewModelDelegate
与view
联系起来了吗?我在这一点上很困惑。
如果我有viewModel
为新推送firstViewModel
创建新secondViewModel
,并且SecondViewController
必须在用户弹出推送FirstViewController
之前更新其视图1}}。在这种情况下,SecondViewController
必须观察firstViewModel
并在弹出后通知secondViewModel
的更改,不是吗?
我还有一个关于firstViewController
创作的问题。 ViewController
是下一个ViewControllers创建的参与者吗?如果我创建一个管理ViewControllers
创建和导航的对象,我是否应该通过ViewControllers
传递此对象?
我知道他们非常相似,但我对我应该采用哪种方式以及如何实施感到困惑。关于viewModels
iOS
的信息和示例不多。
我还没有使用MVVM
,因为我想先了解这种模式。虽然它在我的TO-DO列表中。
谢谢!
答案 0 :(得分:1)
这实际上取决于您使用MVVM的原因。实际上,在你提到的两个案例中,我正确地做到了。以下是MVVM使用的两个原因:
首先,您可能正在使用MVVM,因为您希望以一种将逻辑拉出VC并保持其清洁的方式来组织代码。在这种情况下,您使用的是一个良好OOP形式的ViewModel,它完全可以让VC创建它。
另一方面,您可能打算对您的VC进行UI测试,因此想要引入模拟ViewModel。在这种情况下,您希望将ViewModel交给VC。 (即依赖注射)
在我看来,要么是合理的。您甚至可能在一个应用程序中有多个需求。因此,我保持灵活性。我的方法是在VC 的viewDidLoad()方法中创建VM,只有它还不存在。这允许我使用我的普通虚拟机并在我的VC中创建它(整齐地),但如果我需要覆盖它(单元测试,UI测试,备用视图样式),我也可以。
答案 1 :(得分:0)
问题来自Cocoa应用程序,根据定义使用MVC,你必须尝试使MVVM与底层的ViewController结构一起工作。
我还没有看过iOS中的MVVM,但是使用了Xamarin.Forms,其中View只是XAML代码,视图模型与View和Model交互。在Cocoa应用程序中,如何处理ViewModel部分并不重要,但是看看你的链接,我认为第二种方法更接近于更纯粹的MVVM方法。
我建议您下载链接中的代码并查看以获得更好的理解?