这是我参与「第四届青训营 」笔记创作活动的第5天
前言
这是我在青训营发表的第五篇笔记,仅以此来记录我在青训营的学习成长历程。
本篇笔记的格式参考青训营所发布的笔记创作评判标准 & 模版
一.项目简介
做一个极简抖音App,实现两大模块。第一个模块是榜单模块,通过代码实现可以获取榜单基本信息以及历史数据查询;第二个模块是个人中心模块,通过代码实现可以展示授权账号的基本信息以及已发布视频列表。
二.涉及技术&知识点
- 技术栈
Kotlin+Java+Retrofit+Room+mvvm
- 架构设计
Q:为什么viewModel层使用liveData而不是Flow?
A:我们评估业务逻辑和接口并没有非常复杂,不需要实现多接口的异步数据流,故没有使用Flow。
Q:为什么使用协程而不是RxJava?
A:协程学习成本较低,比较容易上手,比较适合我们组。
Q:为什么不使用消息总线框架比如LiveDataBus、RxBus、EventBus
A:一是实现起来比较复杂,二是项目目前还用不到,毕竟用了协程,后续有需要会通过协程Channel实现eventBus。
三.实践过程
开发语言:Kolin为主,少部分Java
网络请求:使用retrofit,自定义CallAdapter以及CallResult统一处理网络异常,通过自定义拦截器实现网络请求数据可视化以及实现添加公共参数(headers和body),token更新等功能,使用协程使代码同步化避免回调地狱。
数据库存储:使用room,使用单例模式,封装常用增删改查操作,实现对象转换器。
mvvm框架:
view层:使用Databinding完成数据绑定;使用glide完成图片加载;封装BaseActivity和BaseFragment实现布局、监听器添加、快速view获取等功能;使用协程完成生命周期内的异步编程(lifecycleScope);封装BaseRecyclerViewAdapter实现加载更多等功能。
viewModel层:使用liveData实现单向数据流,实现和view层解耦,使用协程完成异步编程获取数据(viewModelScope),封装BaseViewModel完成Repository初始化。
Repository层:抽象的Model层。包括网络请求和数据库存储,上文已经提及,此处不再赘述。封装运行在IO调度器的协程完成数据准备工作。
四.总结思考
1、目前仍然存在的问题:UI界面不够美观;AppSetting存在内存泄漏的可能性;仍然有http code为200但是存在没有处理的error_code的情况;代码质量仍需提高,需要补全文档以及注释。
2、已经识别出的优化项目:UI界面重构;个别地方context的获取;代码重构提高质量;文档和注释。
3、结构演变的可能性:目前项目结构比较合理完善,在业务逻辑不会非常复杂的情况不会有非常大的变动,因为结构轻耦合,所以可以拓展数据源,也可以改变UI框架。
4、实践过程中的反思与总结:虽然只是个小demo,但是仍然存在共同交流不及时,开发流程不够规范等问题,需要后续解决这些问题。
五.引用参考
笔记创作评判标准 & 模版【内部资料 故不放链接】
大作业:极简抖音-青训营【内部资料 故不放链接】