【问题标题】:SwiftUI Deciding the best viewModel to put logicSwiftUI 决定放置逻辑的最佳 viewModel
【发布时间】: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 更适合这个?

【问题讨论】:

    标签: ios swift mvvm swiftui swift5


    【解决方案1】:

    如果 savedItems 属于用户,则由用户负责处理,因此 saveItem() 属于 UserViewModel。

    【讨论】:

    • 如何检查特定项目是否已保存? isSaved() 这是否也属于 userviewmodel,因为 savedItems 属于用户还是属于 itemViewModel ?
    • isSaved 是 Item 的一个特性/属性,因此它的 Item 的责任,所以它应该属于 Item。
    • 当您有这种疑问时,请提出问题:谁将执行该行为?应该在哪里采取行动?这对我来说很清楚:)
    • Item 将具有 isSaved 属性对我来说没有意义,为什么要关心它是否保存?您只需将该项目添加到用户保存的Item 数组中。然后你可以在用户isSaved(item:)->Bool 上设置一个函数,告诉你给定的项目是否被这个用户保存。
    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 2013-01-20
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多