MVP定义?
M:处理业务逻辑和实体模型
V:对应于Activity,负责View的绘制以及用户交互
P:负责完成View层与Modle层的交互
MVP与MVC的区别?
1)在MVC设计模式中,数据Modle层与视图View层是可以直接进行数据交互的,MVP则不行,MVP设计模式中,Modle层与View层的数据交互是通过Presenter完成的。
2)MVP的解耦性比MVC更低(因为它把Presenter层作为View层与Modle之间的桥梁,而不会轻易的让M层与V层进行交互)
3)需要将复杂的逻辑抽离成接口的形式,且代码比MVC要多
MVP优点:
1,Model与View完全分离,彻底解耦
2,Presenter复用,可以将一个Presenter用于多个视图,而不用改变Presenter的逻辑
3,可以实现View接口进行逻辑测试(Presenter的单元测试)
MVP的缺点及优化:
1,View层过大,Activity复杂,加入模板方法,分离出BaseActivity用于处理公共逻辑
2,Model层过大,做好模块划分,进行接口隔离,在内部进行分层。
3,还有一个问题是,MVP额外的增加了很多类和接口,这个可以根据项目实际情况进行相应地优化
MVP如何设计一个登陆接口?
首先需要一个获得用户名,获得用户密码的方法,如果有清除那就需要清除用户名,清除用户密码的方法,另外登陆是个耗时操作,所以我们需要友情提示,那就需要定义显示progressbar加载状态,隐藏progressbar加载状态两个方法,最后就是登录成功与失败的处理,成功跳转到主Activity以及错误给个提醒
登陆实例:
首先声明一个LoginContract 契约类,定义了登录页面的Loginview接口、Loginmodel接口和对应的回调,在view中,定义UI展示与用户数据获取的相关方法,如检查账号密码格式成功(失败)、登录成功(失败)等。model负责数据请求,定义登录的方法。回调定义了登录成功还是失败的方法。创建Model实现类,重写其登录方法既可,将登录结果交给回调。定义Presenter,内部持有LoginView的实例,对获取到的用户信息做一个判断处理然后调用实现类modle层的登陆方法,最后在Activity中重写LoginView的方法与声明Presenter的实例进行操作就可以了
总结:
简要总结MVP三者之间的关系是:View和Model之间没有联系,View通过接口与Presenter进行交互,Model不主动和Presenter联系,被动的等着Presenter来调用其接口,Presenter通过接口和View/Model来联系。