MVP设计模式是android开发讨论的很火的一个话题,我对设计模式也有一些拙见,为了实践我的一些想法,我在我最新开发的产品中将我心目中的MVP设计模式进行了实践,最后得到了这样的架构。

特点:简单,清晰,拓展性好,能够解决目前碰到的业务场景

因为是基于MVP进行的改造,所以同样是有Model,Presenter,View三层,三层的关系如下图:

 
 

1. view单向持有presenter,所有同步数据的获取都是通过presenter得到
2. presenter单向持有model,通过model去获取持久化数据
3. presenter单向持有httpCallback,用于发起异步请求
4. httpCallback通过EventBus消息的方式通知到注册了消息的view
5. view自己保存自己的数据,当收到otto消息的时候自行展示
注意只是展示数据而已,不对数据做任何处理,不包含业务
6.
单Activity架构,view和view之间的通信通过UiManager来实现,所有Window级别view的创建都在UiManager里面完成
7.UiManager的生命周期同Activity保持一致,view通过event与UiManager进行通信
8.所有对象之间的持有都是通过dagger2框架的依赖注入来实现

这样的设计目的有以下几点:
1. 不设计层和层之间的双向持有,双向持有用来解决的异步更新的问题通过EventBus让view自行实现
1.1. 一是给presenter减负,不需要持有每个view的数据,对view的逻辑控制可以将数据的展现完全交给view来做
1.2. 二是解决了双向持有之间的权利分配问题,减少接口定义的工作,让分层更加清晰,代码更简单
2. 同MVP一样,view负责向presenter索取数据和展示数据,是绝大部分用户交互流程的起点和终点(自发业务除外,比如定时更新等),让view层有更好的拓展性

为了实现以上架构,用了以下几个开源框架,让代码更加简洁:

Dagger2,依赖注入框架,让创建类变成一件很简单的事情
Otto,RxAndroid的前身,一款EventBus框架,解决异步通知的问题
ButterKnife,针对android的代码自动生成框架,不需要再写findViewById和setOnClickListener这样的方法
okhttp+retrofit,网络通信框架,串联式的异步通信开发,保证功能和效率的同时降低开发成本

最新文章

  1. MySql索引总结
  2. fsn文件解析(C#)
  3. 【iOS】Quartz2D图片剪切
  4. Hbase源码分析:Hbase UI中Requests Per Second的具体含义
  5. png24是支持Alpha透明的。。。。。。
  6. bzoj1069
  7. 初尝easyui
  8. 实现自己的脚本语言ngscript之四:代码生成
  9. 【转】C++之内部类(嵌套类)与外部类及友元
  10. centos下chm阅读器
  11. string字符串转C风格字符串 进而转换为数字
  12. springboot(十六):使用Jenkins部署Spring Boot
  13. DirectX11--HLSL编译着色器的三种方法
  14. git 与 ftp 共同工作
  15. ASP.NET Core如何使用WSFederation身份认证集成ADFS
  16. python3+django2 开发易语言网络验证(下)
  17. macbook 下 spark开发环境搭建(基于idea 和maven)及spark单机写运行jar
  18. 《Miracle-House团队》第三次作业:团队项目的原型设计与开发
  19. Hbase记录-HBase基本操作(二)
  20. 小猴打架(luogu4430)(数论+生成树计数)

热门文章

  1. php课程 9-33 php文件操作里面的注意事项有哪些
  2. linux终端下一些“风骚”的按键操作及Linux终端命令
  3. (转载)iis7下站点日志默认位置
  4. bootstrap课程3 bootstrap中常用的排版样式有哪些
  5. stm32优先级
  6. js进阶 11-22/23 js如何实现选项卡
  7. 认识PWA
  8. P2P网络借贷系统-核心功能-用户投标-业务讲解
  9. Python 标准库和第三方库的安装位置、Python 第三方库安装的各种问题及解决
  10. 谈谈JavaEE的mvc模式及典型的三层架构