A dumb UI is a good UI: Using MVP in iOS with swift

276 阅读1分钟

原文链接


有许多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写单元测试了。