【发布时间】:2021-05-01 05:53:31
【问题描述】:
我正在尝试了解如何在 iOS 中正确使用 MVVM 模式。假设我们有一个音乐播放器应用,其播放列表如下图所示:
我有一个 PlaylistViewController 和一个 PlaylistViewModel。此外,单元格(SongTableViewCell)有一个视图模型 SongCellViewModel 保存数据(歌曲名称,..)。如果用户按下 TableViewCell 上的 X 按钮,我必须从数据库中删除歌曲。单元格在 SongCellViewModel 中调用以下函数:
func deleteSongFromPlaylist() {
DatabaseService.shared.deleteSong(self.song)
}
我的问题:这样做好吗?在 TableViewCell 的视图模型中发起数据库操作感觉不对。
【问题讨论】:
-
视图模型应该告诉模型从播放列表中删除该项目。然后模型负责更新数据库。我通常不会有一个单元格的视图模型,只是为了表格视图,并让单元格通过闭包或委托将用户操作传回视图控制器。这也简化了 tableview 的更新,因为您不必通知播放列表视图模型有关更新。