这个项目是一个使用清洁架构的 SwiftUI 示例应用。它展示了如何使用 CoreData 进行数据持久化,如何进行网络请求,依赖注入,单元测试等等。

主要特性包括:

  • 纯粹的 SwiftUI + Combine 实现
  • 解耦的展示层、业务逻辑层和数据访问层
  • 完整的测试覆盖,包括 UI(感谢 ViewInspector)
  • 类似 Redux 的集中式 AppState 作为单一数据源
  • 使用 CoreData 进行数据持久化
  • 原生的 SwiftUI 依赖注入
  • 程序化导航。带有深度链接的推送通知
  • 基于泛型构建的简单而灵活的网络层
  • 处理系统事件(如 didBecomeActive,willResignActive)
  • 遵循 SOLID,DRY,KISS,YAGNI 设计原则
  • 设计用于扩展。可以作为构建大型生产应用的参考

架构概览:

  • 展示层:SwiftUI 视图,不包含业务逻辑,是状态的函数。
  • 业务逻辑层:由 Interactors 表示。Interactors 接收执行工作的请求,如从外部源获取数据或进行计算,但它们永远不会直接返回数据。相反,它们将结果转发给 AppState 或 Binding。
  • 数据访问层:由 Repositories 表示。Repositories 提供异步 API(来自 Combine 的 Publisher)用于在后端或本地数据库上进行 CRUD 操作。它们不包含业务逻辑,也不会改变 AppState。Repositories 只能被 Interactors 访问和使用。

这个项目是为了展示如何在 SwiftUI 应用中使用清洁架构。应用使用 restcountries.com 的 REST API 来显示国家列表和关于它们的详细信息。

countries_preview.png

链接: clean-architecture-swiftui