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

1,884 阅读4分钟

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

1, 架构选择

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


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
  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支持

依赖注入

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

数据库相关

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

  1. GreenDAO

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

辅助

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

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

PS: 个人计划运营一个从零开始开发Android的公众号: Android探索之路 欢迎关注, 推荐.


AndroidDevRoad