zoukankan      html  css  js  c++  java
  • Android--MVP设计模式实践

    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,网络通信框架,串联式的异步通信开发,保证功能和效率的同时降低开发成本

  • 相关阅读:
    Matplotlib
    Numpy&Pandas
    莫凡《机器学习》笔记
    李宏毅《1天搞懂深度学习》笔记
    Git客户端使用教程
    像素级压缩感知图像融合的论文
    二分图【洛谷P2175】 小Z的游戏分队
    模板【洛谷P3390】 【模板】矩阵快速幂
    模板 可并堆【洛谷P3377】 【模板】左偏树(可并堆)
    LCA SP913 QTREE2
  • 原文地址:https://www.cnblogs.com/DreamRecorder/p/9272357.html
Copyright © 2011-2022 走看看