写了一个Gank客户端(MVP+Rxjava+Dagger2)

银子

摸鱼用gank.io公开API写了个练手项目。主要是在实际的项目中使用一些主流的技术,诸如MVP,RxJava,Dagger等。 项目地址:GankU:https://github.com/rabbitknight/GankU

TL;DR
技术概要
RxJava2+RetrofitRxJava仅配合Retrofit,作为网络请求资源的处理使用。
MVP使用mvp架构思想,M层未做较优处理。V、P层隔离、仅接口访问。Activity与Fragment既是V层,又是P与V结合的地方。
Dagger2强化Dagger的使用,P层、控件、网络请求均使用Dagger注入到Act\Frag。
M D使用ToolBar、NavView、SRL、CoordinatorLayout等。
Animator部分使用了属性动画、包含animated-vector向量动画的使用。
Custom View为ImageView添加包装类实现手势操作,一个使用了贝塞尔曲线的indicator,自定义的ItemDecoration等。
Web使用腾讯X5内核作为WebView,待添加CustomTabs获取更优秀的效果。
------

项目结构
└─ganku
    ├─common			+ common包,静态变量等
    ├─di				+ dagger依赖注入包
    │  ├─component		- 注射器 
    │  ├─module			- 模块
    │  └─scope				- 作用域
    ├─mvp				+ mvp包,项目为mvp架构
    │  ├─model			+ 数据层,有缺陷
    │  │  └─remote			- bean类等
    │  ├─presenter		+ 表现层,专注业务逻辑处理
    │  │  ├─base			- 最基本接口
    │  │  ├─impl			- 接口实现
    │  │  └─interfaces		- 集成接口
    │  └─view			+ 显示层,专注View的显示
    │      ├─base			- 最基本的接口
    │      ├─interfaces		- 集成接口
    │      └─ui				+ ui显示包,接口实现
    │          ├─activity		- Activity
    │          ├─adapter		- 适配器
    │          ├─fragment		- 碎片,用于显示
    │          ├─listener		- 监听器
    │          └─widget			- 自定义组件
    ├─net				+ 网络访问包,注:已被废弃
    │  └─api				- Retorfit的接口
    └─utils				+ utils辅助类,String处理等
复制代码

运行Demo
descimg
launcher
main
main2
Web
------

使用技术:

参考build.gradle

    compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.android.support:support-v4:26.1.0'
    compile 'com.android.support:design:26.1.0'
    compile 'com.android.support:recyclerview-v7:26.1.0'
    compile 'com.android.support:cardview-v7:26.1.0'
    compile 'com.android.support:customtabs:26.1.0'
    testCompile 'junit:junit:4.12'
    compile 'com.google.dagger:dagger:2.13'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.13'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.1.6'
    compile 'com.github.bumptech.glide:glide:4.3.1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    compile 'com.squareup.okhttp3:okhttp:3.9.0'
    compile 'com.jakewharton:butterknife:8.4.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
复制代码

一点点总结
  1. 关于Dagger2的依赖注入,看到一些github上的同级别项目,并没有将Dagger这一流痞的库很好的使用他们在Activity中仍然很多new Clazz();。为此,我强化了Dagger的使用,致使项目中MVP中的P层使用依赖注入到Activity\Fragment,同时很多的View要么使用ButterKnife,要么使用Dagger注入到相应位置,使得在项目中基本看不到new Clazz(); 这种方法。
  2. 关于MVP项目,借助于Dagger2的使用,使得MVP三层分离的比较彻底。三层各司其职,仅通过接口访问,OOP。
    • View层专注于界面的显示,其向外暴露的接口仅用于控制界面的显示效果。
    • Presenter层专注于事务,它通过View层接口传递的信息,进行逻辑处理,并调用V层暴露的接口控制View层界面做出改变。
    • Model层专注于数据,道理上说,V层的事件交于P层处理,P层可能会调用M层的接口获取一些数据。然而因为强化Dagger的使用,我将RRO的网络访问框架直接注入到了P层--,那么M层就一下子消失了--,所以实际上框架可能实际只是MV p 还不是MVP。但是使用思想并不意味着要完全实现。
    • Activity\Fragment既是View又是P层与V层结合的地方。Act与Frag对于Android来说既是一个View显示的地方又是一个做逻辑处理。
    • 在MVC思想中,V实际代表的是XML布局,那么C在Android中就是Activity等,对应的很好。但是对于MVP,我们将P层抽离,但是P层又仅能在Activity中被调用,依赖Act存在。而Act又是某种意义上的View,这时的Activity的地位就稍微有点尴尬了。因此实际上,私以为Android中的MVP思想实际是一种代理模式这种说法对于大部分和用户交互的App应该是没问题的。
  3. Rx系函数式编程。函数式编程、响应式编程我了解比较浅,对于这种编程思想来说,一个函数的输出作为另一种函数的输入。函数相互调用形成一种链状的**“流”**。这与观察者模式不谋而合,通过对这种思想的使用,使得整个工程结构更加清晰,我们只需关注每个函数流的流向即每个函数的功能,将每个逻辑单独抽离,而不关注具体的实现,这使得项目更加清晰,也符合OOP的原则、高内聚低耦合。
  4. 关于自定义View,至今,据我了解,Android从业者呈现一种金字塔形势分布,较为低级的人员充斥在这个市场当中,但越往上的能力者越少。我也在想从13年移动行业的井喷式增长开始,到18年我该毕业的今天,拥有5年左右的开发者,他们在整个行业中处于什么样的地位,他们拥有怎样的技能树。我遇到的人,还是较少,暂不能得到答案。但以不变应万变,基础的东西的变化仍然是较低的,对于自定义View的掌握肯定是必要的。如今开发,想要获得一个效果,搜一下第三方库就很多。虽不要重复早轮子,但是前提是会造轮子。不需要知道细枝末节,但是对于脉络原理还是要知道的。为此学习一些自定义View是很必要的。我在这个项目中实现了一个贝塞尔拟合圆的ViewPager指示器,实际挺简单,300行左右的代码但是对于自定义View的收获还是挺多的。
  5. MD,Material Design是一种设计风格,与IOS的扁平化相对应。目前大部分的App,还是喜欢和IOS对齐,这也没错。我所了解的App中Android端的BiliBili、网易云等对于MD的应用最为出色。可能我们不是写UI的不需要设计的很好看,但是去发现美(无论是何种美)确实应该去做的。
  6. 。。。

TODO
  • IMG
    • ImageViewWrap,手势包装类的优化
    • 妹子图的下载收藏等
  • Web
    • CustomTab的集成,获取更好体验
    • 右上角分享、复制URL等功能
  • 主页
    • 主题切换
    • 部分细节优化
  • ...

Thanks
  1. 首先感谢gank.io 家的API。
  2. 然后某些界面的设计理念参考~~(读书人的事情不能用抄)~~了一些例子。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值