SwiftUI 决定放置逻辑的最佳 viewModel
Posted
技术标签:
【中文标题】SwiftUI 决定放置逻辑的最佳 viewModel【英文标题】:SwiftUI Deciding the best viewModel to put logic 【发布时间】:2020-05-14 19:11:35 【问题描述】:假设我有一个与 Instagram 类似的应用程序。有一个名为ItemView
的视图显示有关项目的详细信息。在此视图中,有一个按钮可以保存项目以供以后使用。就像 Instagram 一样。
我有两个视图模型。 ItemViewModel
用于 ItemView 和另一个称为 UserViewModel
class ItemViewModel: ObservableObject
@Published var item: Item
init(item: Item)
self.item = item
// here?
func saveItem()
//
class UserViewModel: ObservableObject
@Published var savedItems: [SavedItem] = []
@Published var item: Item
init(item: Item)
self.item = item
// or here?
func saveItem(item: Item)
//
所有已保存项目的数组,因为它们属于用户,所以保存在UserViewModel
。
问题是saveItem()
的此功能是否属于ItemViewModel
,因为此按钮位于ItemView
中,还是属于UserViewModel
,因为这是特定于用户并且用户可以保存项目?哪个 viewModel 更适合这个?
【问题讨论】:
【参考方案1】:如果 savedItems 属于用户,则由用户负责处理,因此 saveItem() 属于 UserViewModel。
【讨论】:
如何检查特定项目是否已保存?isSaved()
这是否也属于 userviewmodel
,因为 savedItems 属于用户还是属于 itemViewModel ?
isSaved 是 Item 的一个特性/属性,因此它的 Item 的责任,所以它应该属于 Item。
当您有这种疑问时,请提出问题:谁将执行该行为?应该在哪里采取行动?这对我来说很清楚:)
Item
将具有 isSaved
属性对我来说没有意义,为什么要关心它是否保存?您只需将该项目添加到用户保存的Item
数组中。然后你可以在用户isSaved(item:)->Bool
上设置一个函数,告诉你给定的项目是否被这个用户保存。以上是关于SwiftUI 决定放置逻辑的最佳 viewModel的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 开始渲染 ContentView 之前,我们如何从 Views 中独立运行一些逻辑?