MVP模式通常包含四个要素:
(1)View:负责与用户交互。其实就是android中的Activity或者fragment。
(2)View Interface:需要View实现的接口,View通过View interface与Presenter进行交互,方便进行单元测试。
(3)Model:负责存储、检索、操纵数据,主要是数据方面的。一般也会写接口来实现。
(4)Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。其里面有两个接口的对象,通过对象调用两个 类里的方法。
优点:
(1)降低耦合度
(2)模块职责划分明显
(3)利于添加单元测试代码
(4)代码复用
(5)隐藏数据
(6)代码灵活性
Presenter层与MVC的Controller一样,负责核心逻辑,但是Presener通过接口协议进行数据传递,并阻断了View和Model的直接联系,从而View与Model更加专注于自身逻辑关系。下面是图示:
上图可以看出,view和presenter是相互的,简单的说就是下面的解释:
(1) view ----> presenter
通过new presenter对象,调用presenter的方法 A(),A()里面通过model对象调用model的方法 M(),这样就是实现了 view 到 model.
(2)presenter----> view
presenter 到 view 其实是 model 到 view,presenter调用model的 MA()方法,然后根据 MA()方法的返回值调用view 中的函数。
View层可以调用Presenter的逻辑方法,Presenter也可以控制View的显示。
开始使用MVP模式的时候,我最大的困扰就是不知道 IView 接口里写什么,每次都要在Activity里写一个功能函数然后再去view接口里补充,这样每次感觉特别乱,下面是我再一个博客上看到的,觉得总结的挺好的。对于View接口,观察功能上的操作,然后考虑(以登陆为例):
A.该操作需要什么? (getUserName getPassWord)
B.该操作的结果,对应的反馈?(showFailedError ) //主要是对各种可能出现状态的处理
C.该操作过程中对应的友好交互?(showLoading hideLoading)
下面的图示MVP与MVC的区别,我觉得对这两个模式的区别和特点说的很清楚:
这是我最近学习的MVP模式的总结,如果有什么不足之处请指教。