有许多MVP的变种模式,它们都略有差异。这篇文章选择了一种在今天的app开发中比较常见的模式。
这个模式的特征是:
1、MVP的视图部分由UIView和UIViewController共同组成
2、视图通过代理把用户交互传递给presenter
3、presenter包含处理用户交互的逻辑
4、presenter和模型层交流,把数据转换成UI需要的格式,并且更新视图
5、presenter对UIKit没有依赖
6、视图是被动的
架构具体内容:
model:一个普通的瘦model,定义数据结构
service:一个获取原始数据的类,网络请求,数据库请求等
viewData:一个结构体,提供能够直接被视图使用的数据
viewProtocol:继承NSObjectProtocol的协议类,供presenter使用来跟viewController交互
protocol UserView: NSObjectProtocol {
func startLoading()
func finishLoading()
func setUsers(users: [UserViewData])
func setEmptyUsers()
}
presenter:通过service获取数据,并通过一个viewController的弱引用,来发送可显示的数据给viewController
便于测试:
MVP最大的好处之一就是能够测试大部分的UI逻辑而不需要测试UIViewController自己。因此如果我们对presenter有一个好的单元测试覆盖,我们就不需要再给UIViewController写单元测试了。