PMVP 是...
- 一个用于在移动应用程序中管理数据的框架。
- 一个面向开发者的工具。
- 响应式,遵循响应扩展(Rx)设计模式。
- 轻量且可扩展!
PMVP 不是...
- Core Data 的替代品。
- Realm 的替代品。
- 重型。
概述
有关详细说明和示例,请参阅 Motiv Engineering 博客上的内容
Provider
通用的 Provider 类定义了用于协调对本地和远程数据存储的访问的接口和样板实现。您负责实现各种特定领域的组件,例如转换器和存储适配器。框架处理所有繁重的工作,使用您的自定义组件。
模型
通用的 ViewModel
视图
视图组件是简单的 UIKit 对象,负责向用户展示视图状态。它们还充当用户通过屏幕组件交互来改变 ViewModel 状态的机制。如果有的话,视图代理在控制器中定义,并必须转换为 ViewModel 意图。
展示者
通用的 Presenter
开始使用
Podfile
pod 'PMVP', '~> 0.4'
实现所需组件
假设您正在创建一个用于管理项目的类。
class ItemProvider: Provider<...> {
在定义提供者之前,您需要满足其依赖项。您需要为以下内容创建类
- ItemProxy: 代理(您在应用程序中用于描述项目的轻量级对象)
- ItemLocal: 本地对象(必须继承自LocalObject;通常是一个Core Data或Realm管理的对象)
- ItemRemote: 远程对象(必须继承自RemoteObject;定义远程对象模式)
- ItemLocalConverter: 转换器(在代理和本地对象之间进行转换)
- ItemRemoteConverter: 转换器(在代理和远程对象之间进行转换)
- ItemLocalStorage: 本地存储(您自定义的本地数据访问器实现)
- ItemRemoteStorage: 远程存储(您自定义的远程数据访问器实现)
定义完成后,您可以按如下方式创建提供者类
import PMVP
class ItemProvider: Provider<Int, ItemProxy, ItemLocal, ItemRemote, ItemLocalStorage, ItemRemoteStorage> {
}
用法
监控集合
itemProvider.objects()
.subscribe(onNext: { items in NSLog("\(items.count) objects") })
.disposed(by: disposeBag)
监控单个项目
itemProvider.object(for: 127)
.subscribe(onNext: { item in NSLog(item) })
.disposed(by: disposeBag)
创建/更新项目
itemProvider.update(item, queue: .main) { result in
switch result {
case .success(let localItem):
NSLog("item updated \(localItem)")
case .failure(let error):
NSLog("failed to update item: \(error)")
}
}
删除项目
itemProvider.destroy(item, queue: .main) { result in
switch result {
case .success(let localItem):
NSLog("item deleted \(localItem)")
case .failure(let error):
NSLog("failed to delete item: \(error)")
}
}