gpt4 book ai didi

ios - 在具有 MVVM 架构的 iOS 应用程序中调用 Web 服务的最佳位置是什么?

转载 作者:技术小花猫 更新时间:2023-10-29 11:02:50 27 4
gpt4 key购买 nike

目前我正在使用 MVVMC 架构开发 iOS 应用程序。通过阅读这篇文章,我对 MVVMC 有了一些了解 article .作为典型的 MVVM 模型,我们知道所有主要的应用程序 Controller (如 Web 服务调用)都应该在 ViewModel 类中调用。但在 MVVMC 架构中,我们可以使用 Coordinator 或 ViewModel 来调用 Web 服务。我不知道什么地方最适合做这个。

我目前正在尝试使用 UITableViewController 实现应用程序的用户列表页面。以下是我的 UserCoordinator 和 UserViewModel 类的一些部分。


用户协调器

class UsersCoordinator: Coordinator {

var window: UIWindow
weak var delegate: UsersCoordinatorDelegate?

var selectedCity: City?

init(window: UIWindow) {
self.window = window
}

func start() {
let storyboard = UIStoryboard(name: "Users", bundle: nil)
if let vc = storyboard.instantiateViewController(withIdentifier: "list") as? UsersListController {
var viewModel = UsersListViewModel()
viewModel.delegate = self as UsersListViewModelDelegate
viewModel.veiwController = vc
vc.viewModel = viewModel
vc.coordinationDelegate = self as CoordinationDelegate
let nav = UINavigationController.init(rootViewController: vc)
window.rootViewController = nav
}

}

用户 View 模型

 protocol UsersListViewModelDelegate: class  {
func selectUser(viewController: UIViewController, city: City)
}

struct UsersListViewModel {
var delegate: UsersListViewModelDelegate?
weak var veiwController: UsersListController!
var source = [String]()

init() {
for user in users {
source.append(user.name)
}
}

func selectRow(row: NSInteger) {
delegate?.selectUser(viewController: veiwController, user: users[row])
}

fileprivate var users: [User] {
get {
//web service call??
}

我应该在哪里调用这里的网络服务?正如我从理论上读到的那样,协调器是应用程序路由的专用位置。因此,根据这一点,最好在 ViewModel 中调用 Web 服务。但我觉得最好在 Coordinator 中调用 Web 服务,因为它会非常快速地加载数据并填充 viewModel。我该怎么办?

最佳答案

您需要了解 ViewModel 和 Co-ordinator 的用途,才能知道什么应该包含什么。 ViewModel 的职责是为 View 准备数据并处理准备该数据的业务逻辑。它将数据绑定(bind)到 UI 元素,并在数据更改时立即更改 UI。所以 ViewModel 应该是包含服务的那个,所有调用都应该从它进行。

co-ordinator 的职责是通过显示适当的 ViewController 及其所有依赖项(包括 ViewModel)来处理应用程序的导航。因此它还准备了 ViewModel 并在其中注入(inject)服务,而不是使用该服务来操作数据。

因此,如果我总结一下,Co-ordinator 应该是准备 ViewModel 及其依赖项的人,其中包括注入(inject) web 服务,而 ViewModel 应该是使用该服务并进行所有调用以从持久性中获取数据的人.

要获得更清晰的想法,您可以在我的 Github 查看我在MVVM-C 上的示例应用程序

关于ios - 在具有 MVVM 架构的 iOS 应用程序中调用 Web 服务的最佳位置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932352/

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