核心数据和 SwiftUI Core Data、SwiftUI 和 MVVM 打包在一起
问题
自从 SwiftUI 于 2019 年问世以来,我一直在寻找使用 Core Data 的最佳方式:用于处理持久存储数据的旧主宰。我经常对它与 SwiftUI 思维方式的冲突感到不满;促使我将与数据相关的东西暴露给视图,并威胁到我的 MVVM 架构。Apple 默认的 @FetchRequest 非常适合简单的视图,但随着项目变得越来越复杂,它开始变得有点乏味,更不用说在视图中使用 CoreData 的需要了。
所以,我做了我的研究。Donny Walls和Karin Prater提供了很多令人惊叹的内容。通过一些实验,我使用我所学的所有知识想出了我自己的系统。该系统遵循三个重要原则:
- 视图不应该知道核心数据的存在(包括任何 NSManagedObject)
- 所有与数据相关的任务都应由充当唯一真实来源的单例类处理
- 我应该能够在内存中无缝使用预览和 XCTests
一个解法
那么我是如何做到这一点的。
持久存储
让我们从核心数据模型开始。
对于此示例,我有两个实体,它们之间具有一对多关系:TaskMO 和 ProjectMO。出于一个重要的原因,我选择将它们标记为托管对象。它们每个都有一个唯一的 UUID,一些属性,这就是所有重要的。
继续,持久存储。这对于任何