MVP架构实现的Github客户端(1-准备工作)

系列文章:
1-准备工作
2-搭建项目框架
3-功能实现
4-加入网络缓存

承上关于App重构的几个方面主要也是说的架构重构, 本系列尝试以开发一个Github客户端为例, 记录个人在开发一个App项目过程中的一个基本流程, 以及所采用的架构, 技术的运用, 在此过程也会说明下如何规避上文提到的一些代码,架构等问题.

1, 架构选择

毋庸置疑, MVP架构是目前开发Android App最火的架构, 可能MVVM更加吸引人, 但是MVP更加成熟且易于上手. 相比与Activity/Fragment包揽一切的传统开发架构又更加灵活, 便于产品的更新迭代(特别是UI上的变化, 你懂的, 这也是产品们最喜欢变动的部分).
故此次开发的Github客户端将采用MVP架构:

《MVP架构实现的Github客户端(1-准备工作)》 mvp-architecture

  • Model
    • 对外提供业务数据API.
    • 内部实现本地数据, 网络数据的存取等.
    • 只有Presenter可以访问, 与View隔离
  • Presenter
    • 持有View对象, 对View进行操作
    • 持有Model层提供的数据接口对象, 可通过依赖注入解耦此部分.
    • 从数据接口对象中获取数据并处理, 更新View.
  • View
    • UI层, 包含所有UI相关组件.
    • 持有对应的Presenter的对象, 可通过依赖注入解耦此部分.
    • 由Presenter来负责更新UI.

2, 服务器API熟悉

当前大部分的App是需要与服务器交互的, 在开发之前, 我们也需要简单了解下Github提供的API.
因为Github提供了详尽的开发指南, 在此就不详述了.

值得一提的是, Github API的标准的Restful架构的API, 这个是大赞的~

3, 开源库选择

快速开发一个项目, 且抱着不重复造轮子的思想, 选择一些开源库辅助开发是很必要的. 当然, 同类的开源库可能很多, 选择上可能更多是个人喜好和使用习惯的问题, 在此不做比较(可以哪天单立个开源库选择的话题讨论下).
以下根据个人经验和当前项目的情况初步选择的一些库:

网络请求

  1. Retrofit
    • 一个类型安全(Type-Safety)的基于RESTful架构的Android(Java)客户端实现。基于注解动态代理等技术。
    • 源码地址
    • 官方教程
    • 项目中使用此框架来做服务器接口交互。
    • Retrofit只是一个RESTful的架构,可以通过它定义和服务器的接口形态,然而真正的HTTP请求还是需要借助HttpConnection或其他方式去完成的,这就用到了同由Square组织开发的OkHttp。
  2. OkHttp
    • 一个HTTP & SPDY的Android(Java)客户端实现。目前Android4.4的源码中HttpURLConnection已经替换成OkHttp实现,所以当前OkHttp是我们项目中Http请求的一个最常用的库。
    • 源码地址
    • 官方教程
    • 源码解析

图片加载

图片加载的库也有很多, 老牌的UIL(Universal-Image-Loader), google推的Glide, Square组织的Picasso, 以及facebook新晋的Fresco.
各有千秋, 关于这几个的比较可以参考StackOverFlow上的这个问题.
在此个人选择Glide.

  1. Glide
    • Glide本意是滑行,专注于快速Scroll中的图片加载问题,当然也完全可以作为Remote Image的加载库。Google在开发者论坛推荐的,并应用在Google的很多开源项目上。
    • 是一个快速且有效的开源媒体管理以及图片加载的Android 框架,包含媒体解码,内存、磁盘缓存以及资源池等。
    • 支持获取、解码、显示视频、图片、GIF动态图。
    • 源码地址
    • 官方教程
  2. 另外, 个人习惯, 为了拥抱变化, 我会在Glide的基础上再封装一层, 以便可以很方便的替换成其他的库. 如下:
public class ImageLoader {

    public static void load(Context context, Uri uri, ImageView view) {
        Glide.with(context)
                .load(uri)
                .centerCrop()
                .into(view);
    }
}

如需替换成Picasso, 仅仅修改ImageLoader这个文件即可, 由于Picasso的调用方式和Glide几乎一样, 我们要做的可能只是将Glide换成Picasso而已, 如下:

    // 将Glide换成Picasso
    // Glide.with(context)
    Picasso.with(context)
    ...

Rx支持

  1. RxJava
  2. RxAndroid
  3. RxLifecycle
    • 基于RxJava的Activity、Fragment生命周期控制组件。结合RxJava请求使用可以根据Activity、Fragment生命周期自动完成事件序列。避免需要手动调用unsubscribe。
    • 源码地址
    • 官方教程
  4. RxBinding
    • Jake大神的大作, 用来将View的事件转换成Rx模式 (大家可以跟随项目见证它的妙处).
    • 源码地址

依赖注入

这个一般会选择大名鼎鼎的Dagger了, 现在使用的基本都是google fork修改之后的Dagger2.

  1. Dagger2

数据库相关

这个也有很多选择, 个人一般使用GreenDAO, 主要是其编译生成类文件, 比较清晰, 便于看清原理.

  1. GreenDAO

另外, 最近Realm, 极其火爆, 说是基于移动设备打造的数据库, 抛弃SQLite的存在, 可以在练手项目中尝试下.

辅助

  1. Logger
  2. LeakCanary
  3. DBinspector

还有项目过程中还会根据实际情况增减一些库, 到时再说.
另外可能会引入一些注入自定义View, 动画等相关的库, 也是根据产品的实际情况而定.

至此, 一个App项目的前期工作基本就绪了(当然, 这个是作为一个简单的自研项目而言, 如果是公司产品, 还需更多的产品方面的准备, 在此单论技术方面).
接下来, 就会开始搭建项目框架了, 敬请期待.

    原文作者:anly_jun
    原文地址: https://www.jianshu.com/p/13175ff425ee
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞