There are a few major models in my app, one of them being a user model:
struct User: Identifiable, Codable {
var id = ""
var name = ""
// ...
}
I've been experimenting a bit with MVVM in my app and exploring ways to simplify the code, especially in the view models. One idea I had, for example, was to directly supply the models with an update()
function, which is an async call to (obviously) update the model. Using Firebase's API as an example:
extension User {
func update() {
let db = Firestore.firestore()
do {
try db.collection("users").document(self.id)
.setData(from: self)
} catch {
// Error handling ...
}
}
}
Hypothetically, I would also make create()
, delete()
, getSubcollectionXYZ() -> [XYZ]
and other model-specific functions that I could offload from rather large view models.
I've tested it and it seems to work fine, but before I start making changes to my models and view models, I wanted to get the community's opinion on whether or not there are problems with this approach. I have a feeling that there are, given that I've never seen this done in MVVM, but I couldn't say for sure.