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

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

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

1, 架构选择

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


MVP架构实现的Github客户端(1-准备工作)_第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
    • 一个使用Observable序列实现包含异步和基于事件的编程方式框架。
    • 扩展自观察者模式,实现数据、事件序列,并提供了很多Operators可以随意转换Observable,而无需顾虑线程安全,并发同步等。
    • 源码地址
    • 官方教程
    • 给 Android 开发者的 RxJava 详解
    • ReactiveX文档中文翻译
    • Awesome-RxJava
  2. RxAndroid
    • RxJava的Android扩展
    • 源码地址
    • 官方教程
  3. RxLifecycle
    • 基于RxJava的Activity、Fragment生命周期控制组件。结合RxJava请求使用可以根据Activity、Fragment生命周期自动完成事件序列。避免需要手动调用unsubscribe。
    • 源码地址
    • 官方教程
  4. RxBinding
    • Jake大神的大作, 用来将View的事件转换成Rx模式 (大家可以跟随项目见证它的妙处).
    • 源码地址

依赖注入

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

  1. Dagger2
    • 依赖注入框架
    • 源码地址
    • 官方教程

数据库相关

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

  1. GreenDAO
    • GreenRobot组织开发的一个轻量快速的Android ORM数据库实现。
    • 源码地址
    • 官方教程

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

辅助

  1. Logger
    • 漂亮的Log输出库。
    • 源码地址
    • 官方教程
  2. LeakCanary
    • 内存溢出检测库。
    • 源码地址
    • 官方教程
  3. DBinspector
    • 数据库查看库。
    • 源码地址
    • 官方教程

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


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


你可能感兴趣的:(MVP架构实现的Github客户端(1-准备工作))