PMVP是...
- 一个在您的移动应用中管理数据的框架。
- 开发人员的工具。
- 响应式,遵循响应式扩展(Rx)的设计模式。
- 轻量级且可扩展!
PMVP不是...
- Core Data的替代品。
- Realm的替代品。
- 重量级的。
概述
有关详细信息及其示例,请参阅Motiv Engineering Blog
提供者(Provider)
通用的Provider类定义了协调访问本地和远程数据存储的接口和样板实现。您负责实现各种领域特定的组件,如转换器和存储适配器。框架将承担所有繁重的工作,使用您的自定义组件。
Model
泛型ViewModel
View
视图组件是简单的UIKit对象,负责向用户表示视图状态。它们还充当用户通过交互式组件与用户界面组件进行交互以更改视图模型状态的机制。如果有的话,视图代理在控制器中定义,并必须转换为视图模型意图。
Presenter
泛型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)")
}
}