使用清洁架构和MVVM的模板iOS应用
使用清洁分层架构和MVVM实现的iOS项目。(可以通过替换项目名称为“Movie”作为模板项目使用)。更多信息请参见Medium文章:关于清洁架构+MVVM的Medium文章
层级
- 领域层 = 实体 + 用例 + 仓库接口
- 数据仓储层 = 仓库实现 + API(网络)+ 持久化数据库
- 展示层(MVVM) = 视图模型 + 视图
依赖方向
注意: 领域层不应包含其他层的任何内容(例如:展示层 — UIKit或SwiftUI或数据层 — Mapping Codable)
此处使用的架构理念
- 清洁架构 https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
- 高级iOS应用架构 https://www.raywenderlich.com/8477-introducing-advanced-ios-app-architecture
- MVVM
- 使用Observable进行数据绑定且不使用第三方库
- 依赖注入
- 流程协调
- 数据传输对象(DTO)
- 响应数据缓存
- 视图控制器生命周期行为
- SwiftUI和UIKit视图通过重用相同的视图模型(至少需要Xcode 11)
- 错误处理示例:在视图模型 和网络
- CI管道 (Travis CI + Fastlane)
包含内容
- 分页
- 用例单元测试(领域层)、视图模型(展示层)、网络服务(基础设施层)
- 暗黑模式
- 在详细视图中使用尺寸类别和UIStackView
- SwiftUI示例,展示展示层不变,仅变换UI(至少需要Xcode 11)
网络
如果您希望从此示例项目中重用网络作为仓库,我已经将其提供在这里
代码视图与Storyboard
该仓库使用Storyboard(除了一个用SwiftUI编写的视图外)。还有另一个类似的仓库,但不使用Storyboard,所有视图都用代码编写。 它还使用UITableViewDiffableDataSource: iOS-Clean-Architecture-MVVM-Views-In-Code
如何使用应用
要搜索电影,在搜索栏中输入电影名称并点击搜索按钮。会有两个网络请求:请求电影和请求海报图片。每个成功的搜索查询都被持久存储。
https://user-images.githubusercontent.com/6785311/236615779-153ef846-ae0b-4ce8-908a-57fca7158b9d.mp4
要求
- Xcode 版本 11.2.1+ Swift 5.0+