【问题标题】:Could actions be a part of MVVM's ViewModel?动作可以成为 MVVM 的 ViewModel 的一部分吗?
【发布时间】:2019-05-20 20:47:41
【问题描述】:

我有一个这样快速编写的 viewModel:

public protocol NewsViewModel {
    var imageString: String? { get }
    var title: String? { get }
    var dateString: String? { get }
    var action: (() -> ())? { get set}
}

那么我的核心数据对象符合viewModel如下:

extension NewsDataObject {

    private func viewModel(action: (() -> ())?) -> NewsViewModel {

        struct NewsViewModelDefault: NewsViewModel {
            var imageString: String?
            var title: String?
            var dateString: String?
            var action: (() -> ())?
        }

        return NewsViewModelDefault(imageString: imgUrlString,
                                    title: articleTitle,
                                    dateString: pubDate,
                                    action: action)
    }
}

在 viewModel 中使用 action 是个好习惯吗?如果是或否,有什么优点和缺点?

【问题讨论】:

  • 视图模型只是模型的代理,所以真正的问题是:动作可以成为模型的一部分吗?我可以想象这样的场景。那么这个动作对你的业务逻辑有影响吗?

标签: ios swift core-data mvvm viewmodel


【解决方案1】:

我认为这实际上是基于您的行为所做的判断。如果您的操作只是更新 UI,则将其保留在控制器或视图中是有意义的。但是,如果它本质上与模型或网络层集成在一起,则将其移至视图模型中可能是有意义的。

也许您可以在此处详细说明您的情况以获得更好的建议?

一般来说,我总是在视图或控制器中实现初始控制处理程序。然后根据需要调用视图模型上的方法。

/*
MyController
*/
myButton.add(target: self, action, #selector(buttonHandler), for: .touchUpInside)

func buttonHandler() {
    // Decide here if the actual logic belongs in the view model or controller
}

因此,捕捉动作并将逻辑传递到最有意义的地方。至少我会这样处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-29
    • 2022-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    相关资源
    最近更新 更多