动作可以成为MVVM的ViewModel的一部分吗?

时间:2018-12-20 10:29:24

标签: ios swift core-data mvvm viewmodel

我有一个这样写的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内部使用动作是否是一种好习惯?是或否,优点和缺点是什么?

1 个答案:

答案 0 :(得分:0)

我认为这实际上是根据您的行为做出的判断。如果您的操作只是更新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
}

所以赶快行动,将逻辑传递到最有意义的地方。至少这就是我要处理的方式。