首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该将我的UserDefaults保存过程放入ViewModel吗?(良好的建筑)

我应该将我的UserDefaults保存过程放入ViewModel吗?(良好的建筑)
EN

Stack Overflow用户
提问于 2022-02-09 09:04:26
回答 2查看 268关注 0票数 0

我正在创建一个简单的NewsApp。我想创造出我能做的最好的应用架构。因此,我的问题是,如果我想保存像用户名这样的简单数据,或者将5-6标记作为字符串保存,我应该将userDefaults逻辑放入viewModel,还是应该在ViewModel和UserDefaultsAPI之间创建一个负责保存数据的层?

我的意思是我将创建StoreData协议,UserDefaultsAPI将实现该协议。如果我这么做,我怎么能做到这一点呢?我正在使用RxSwift,现在我不知道如何通过UserDefaultsAPI订阅UserDefaults中的更改数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-09 12:29:43

您应该在两者之间创建一个层,但考虑到Rx/,它不应该像协议那样沉重。

学习如何控制世界并做类似的事情:

代码语言:javascript
复制
struct Storage {
    static var shared = Storage()
    var saveProperty: (Property) -> Void = { property in
        UserDefaults.standard.set(try? JSONEncoder().encode(property), forKey: "property")
    }
    var deleteProperty: () -> Void = {
        UserDefaults.standard.removeObject(forKey: "property")
    }
    var currentProperty: () -> Observable<Property?> = {
        UserDefaults.standard.rx.observe(Data.self, "property")
            .map { $0.flatMap { try? JSONDecoder().decode(Property.self, from: $0) } }
            .distinctUntilChanged()
    }
}

struct Property: Codable, Equatable { }
票数 0
EN

Stack Overflow用户

发布于 2022-02-10 12:00:08

这取决于您所做的--创建一个分离层--为实现相同协议的数据提供不同来源的机会可能是有用的,而且您的数据可能比需要编码和解码的类型复杂,因此封装它是有意义的,您还可能希望为您的一些值提供一些限制范围,但是UserDefaults只是一个类似于NotificationCenter的服务,您不会在任何类中自动包装NotificationCenter,只做最简单的事情,但不会在后面的角落中冒险。你不可能在正确的时候决定每一个问题,技巧是确保在需要的时候你能迅速改变,并且知道你将来需要利用什么可能性,以及你如何避免在没有增加蹲的时候进行复杂的改变。有很多事情你需要去做,并且能够对它们进行排序是你所做工作的一个重要部分,不要尝试制作切割器设计,要在设计中成为能让别人理解和修改的设计。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71046647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档