【问题标题】:ViewModel for UITableViewCell: Database operations "allowed"?UITableViewCell 的 ViewModel:“允许”数据库操作?
【发布时间】:2021-05-01 05:53:31
【问题描述】:

我正在尝试了解如何在 iOS 中正确使用 MVVM 模式。假设我们有一个音乐播放器应用,其播放列表如下图所示:

我有一个 PlaylistViewController 和一个 PlaylistViewModel。此外,单元格(SongTableViewCell)有一个视图模型 SongCellViewModel 保存数据(歌曲名称,..)。如果用户按下 TableViewCell 上的 X 按钮,我必须从数据库中删除歌曲。单元格在 SongCellViewModel 中调用以下函数:

func deleteSongFromPlaylist() {
   DatabaseService.shared.deleteSong(self.song)
}

我的问题:这样做好吗?在 TableViewCell 的视图模型中发起数据库操作感觉不对。

【问题讨论】:

  • 视图模型应该告诉模型从播放列表中删除该项目。然后模型负责更新数据库。我通常不会有一个单元格的视图模型,只是为了表格视图,并让单元格通过闭包或委托将用户操作传回视图控制器。这也简化了 tableview 的更新,因为您不必通知播放列表视图模型有关更新。

标签: ios swift mvvm viewmodel


【解决方案1】:

我建议将此类操作移至PlaylistViewModel 并从那里执行所有操作。它还简化了后续改进的实现,例如在需要时显示活动指示器或从那里重新加载某些单元格或视图。

我认为SongCellViewModel 应该有一个actionBlock,它将带有相关值的enum - 例如.select(song) .delete(song) - 这样您就可以轻松地在PlaylistViewModelSongCellViewModel 之间进行通信。

另一个建议是对所有类型的服务使用依赖注入而不是使用shared

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 2021-07-26
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多