【问题标题】:Confusion on MVC in swiftswift中对MVC的困惑
【发布时间】:2019-02-02 16:26:39
【问题描述】:
我有一个负责所有网络请求的类。所以我的困惑是我应该在哪里从视图控制器或模型类调用这个网络请求类。假设我有属性 id、name、phone 的“用户”模型类。为了访问登录 API,我应该在这个模型类中创建一个函数“loginwithphone”并从 viewcontroller 调用它,还是应该直接从 Viewcontroller 调用网络请求类。网络请求类本身是否被视为模型?如果是这样,从 viewcontroller 调用它仍然会使我的代码架构成为 MVC。不是吗?
【问题讨论】:
标签:
ios
swift
model-view-controller
architecture
【解决方案1】:
您应该查看定义 MVC 架构的 观察者模式,以定义通过回调管理您的请求的任何方式。
MVC 架构的模型层定义了您的 POJOS,因此“loginwithphone”功能应该在控制器类中,例如“logincontroller”。
总而言之,您的网络请求类应该被视为资源层内的一个类。并且应该调用您的控制器类。
希望对您有所帮助!
【解决方案2】:
在 MVC 中,您应该通过网络类调用网络请求。最好你首先运行一个类或枚举来为你构建请求。之后,您将获得返回给您的模型对象,该模型对象将存储在您的 viewController 中并发送到您要填充的所有视图。
题外话:我喜欢 MVVM,因为您随后调用另一个类 (viewModel) 来保存所有模型和请求,而您在 viewController 中拥有的只是等待 viewModel 完成其请求的视图和回调。
例子:
//ViewController
self.viewModel.fetchData()
self.viewModel.dataFetched = {
view.populate(withData: self.viewModel.datas)
}
//ViewModel
var dataFetched: (() -> ())?
var datas: [Data] = []
func fetchData() {
let request = networkManager.buildRequest()
sendRequest( success: { datas in
self.datas = datas
dataFetched?()
})
}
这是对其如何完成的非常模糊的描述。但我喜欢这种方式