我正在创建一个简单的NewsApp。我想创造出我能做的最好的应用架构。因此,我的问题是,如果我想保存像用户名这样的简单数据,或者将5-6标记作为字符串保存,我应该将userDefaults逻辑放入viewModel,还是应该在ViewModel和UserDefaultsAPI之间创建一个负责保存数据的层?
我的意思是我将创建StoreData协议,UserDefaultsAPI将实现该协议。如果我这么做,我怎么能做到这一点呢?我正在使用RxSwift,现在我不知道如何通过UserDefaultsAPI订阅UserDefaults中的更改数据。
发布于 2022-02-09 12:29:43
您应该在两者之间创建一个层,但考虑到Rx/,它不应该像协议那样沉重。
学习如何控制世界并做类似的事情:
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 { }发布于 2022-02-10 12:00:08
这取决于您所做的--创建一个分离层--为实现相同协议的数据提供不同来源的机会可能是有用的,而且您的数据可能比需要编码和解码的类型复杂,因此封装它是有意义的,您还可能希望为您的一些值提供一些限制范围,但是UserDefaults只是一个类似于NotificationCenter的服务,您不会在任何类中自动包装NotificationCenter,只做最简单的事情,但不会在后面的角落中冒险。你不可能在正确的时候决定每一个问题,技巧是确保在需要的时候你能迅速改变,并且知道你将来需要利用什么可能性,以及你如何避免在没有增加蹲的时候进行复杂的改变。有很多事情你需要去做,并且能够对它们进行排序是你所做工作的一个重要部分,不要尝试制作切割器设计,要在设计中成为能让别人理解和修改的设计。
https://stackoverflow.com/questions/71046647
复制相似问题