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)
- 这样你可以轻松地在 PlaylistViewModel
和 SongCellViewModel
.
之间进行通信
另一个建议是对所有类型的服务使用依赖注入而不是使用 shared
。
我正在尝试了解如何在 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)
- 这样你可以轻松地在 PlaylistViewModel
和 SongCellViewModel
.
另一个建议是对所有类型的服务使用依赖注入而不是使用 shared
。