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

系列文章:
1-准备工作
2-搭建项目框架
3-功能实现
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
    • 一个类型安全(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项目的前期工作基本就绪了(当然, 这个是作为一个简单的自研项目而言, 如果是公司产品, 还需更多的产品方面的准备, 在此单论技术方面).
接下来, 就会开始搭建项目框架了, 敬请期待.


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容