SwiftUI 中的 MVVM 和适当的绑定

MVVM in SwiftUI and the appropriate Bindings

已编辑

一个应用有多个数据源

将所有数据源 combine 合二为一 class 并将其添加为一个环境对象的最佳方法是什么,请记住数据可能会更改,因此对象会更新视图?

适用于哪些绑定:

服务(API 获取):@Published?

计算变量:惰性变量?

请以图表为例。谢谢

这些问题是很好的参考:

https://medium.com/genetec-tech/property-wrappers-in-swift-5-1-the-missing-published-implementation-1a466ebcf660

图表

所以,你应该使用分层架构,你不会有这些问题。

  • 服务层,它是最底层,从web或db,或其他服务读取数据
  • 存储库层 从服务中获取数据并对其进行处理、缓存等
  • 用例层 组合来自多个存储库的数据
  • viewmodel层从usecase获取数据发送到view

每个服务或存储库处理一种类型的数据,例如“用户”

现在,如果您需要合并多种类型的数据,比如说用户和公司,您需要一个 Usecase 层来合并所有数据

在您的 viewmodel 上,您只使用 usecase 层

一个重要的注意事项,传递的对象在层之间发生变化,所以在 服务层 你有 UserDto (来自网络服务),和 UserEntity(来自 DB),repo 将转换 UserResponse 中的那些,你不知道它是 db 还是 webservice 甚至更多 UseCase 将 UserResponse 和 CompanyReponse 转换为 User 对象,该对象将传递给 ViewModel 并包含所有数据那里需要。

此外,在你到达视图模型层之前你不应该需要SwiftUI,如果你需要它,你做错了,使用Swift组合来处理数据.