我应该将UserDefaults保存过程放入ViewModel吗?(良好的架构)



我正在创建一个简单的NewsApp。我想创建我能做的最好的应用程序架构。因此,我的问题是,如果我想将用户名和5-6个标签等非常简单的数据保存为字符串,我应该将userDefaults逻辑放入我的viewModel中,还是应该在viewModel和UserDefaultsAPI之间创建一个层来保存数据?

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

您应该在两者之间创建一个层,但给定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 { }

这取决于你所做的创建一个单独的层给你带来了什么,为实现相同协议的数据提供不同来源的机会可能很有用,而且你的数据可能是复杂的类型,需要编码和解码,所以封装它是有意义的,你可能还想为你的一些值提供一些限制范围,但UserDefaults只是像NotificationCenter这样的服务,你不会自动将NotificationCenter包装在任何类中,只做最简单的事情,但不会冒着以后把自己画在角落里的风险,了解你未来需要利用的可能性,以及如何避免在不增加蹲姿的情况下做出复杂的改变。你需要做很多事情,能够优先考虑这些事情是你所做工作的重要组成部分,不要试图做出切肉刀的设计,要做其他人容易理解和修改的设计中的切肉刀。

最新更新