UITableViewCell 的 ViewModel:数据库操作 "allowed"?

ViewModel for UITableViewCell: Database operations "allowed"?

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

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

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

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

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

我认为 SongCellViewModel 应该有一个 actionBlock,它将 enum 与相关值 - 例如 .select(song) .delete(song) - 这样你可以轻松地在 PlaylistViewModelSongCellViewModel.

之间进行通信

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