产品经理 信息架构 产品经理 app功能架构
转载
目录介绍
- 1.关于项目架构的技术堆栈
- 1.1 该项目App整体架构
- 1.1.1 目前项目[准备中]使用的架构
- 1.1.2 市面常见的架构
- 1.1.3 MVP架构使用心得
- 1.2.1 视频播放技术
- 1.2.2 音频播放技术
- 1.2.3 复杂页面展示
- 1.2.4 状态切换
- 1.2.5 缓存
- 1.2.6 音视频文件下载技术
- 1.3.1 网络请求框架
- 1.3.2 注解框架
- 1.3.3 图片加载框架
- 1.3.4 6.0之后权限申请框架
- 1.3.5 事件总线框架
- 1.3.6 内存泄漏测试框架
- 1.3.7 bug管理
- 1.4.1 上拉加载更多与下拉刷新
- 1.4.2 轮播图
- 1.4.3 关于页面刷新状态的管理
- 1.4.4 常见的弹窗,吐司
- 1.4.5 常用工具类库
- 1.4.6 阿里编码规则插件
- 1.4.7 测试部分
- 2.项目中的代码规范
- 2.1 关于包名,类名,方法名,变量等命名规则
- 2.1.1 包名与分包规则
- 2.1.2 类名命名,类名规范,以及类名注释统一
- 2.1.3 方法名命名,规范以及注释
- 2.1.4 变量,常量命名规范及注意要点
- 2.3 UI相关说明,资源文件string,color
- 2.4 代码布局规范
- 3.项目中的常见业务分析
- 3.1 版本更新分析
- 4.关于代码解耦和抽离思索
- 4.1 业务代码避免耦合度过高
- 4.2 如何解耦
- 4.3 接口的分离
- 5.其他问题说明
- 5.1 版本更新情况
- 5.2 参考链接
- 5.2 个人博客
1.关于项目架构的技术堆栈
1.1 该项目App整体架构
- 1.1.1 目前项目[准备中]使用的架构
- 准备使用架构是MVP,Rx+Retrofit是网络请求框架,Vlayout是阿里出的处理复杂UI界面框架,ijkplayer是bilibili公司出的音视频播放框架
- MVP作为MVC的演化,解决了MVC不少的缺点,对于Android来说,MVP的model层相对于MVC是一样的,而activity和fragment不再是controller层,而是纯粹的view层,所有关于用户事件的转发全部交由presenter层处理。
- 1.1.2 市面常见的架构
- 目前存在常见架构有MVC,MVP,MVVM等,具体可以看我的印象笔记之架构分析文档
- 1.1.3 演变后的心得
- MVP框架由3部分组成:View负责显示,Presenter负责逻辑处理,Model提供数据。在MVP模式里通常包含3个要素(加上View interface是4个):
- View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity)
- Model:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合)
- Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。
- View interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试
- 感觉最大的差别差别就是view层和model层不再相互可知,完全的解耦,取而代之的presenter层充当了桥梁的作用,用于操作view层发出的事件传递到presenter层中,presenter层去操作model层,并且将数据返回给view层,整个过程中view层和model层完全没有联系,虽然view层和model层解耦了,但是view层和presenter层不是耦合在一起了吗?其实不是的,对于view层和presenter层的通信,我们是可以通过接口实现的,具体的意思就是说我们的activity,fragment可以去实现实现定义好的接口,而在对应的presenter中通过接口调用方法。解决了MVC模式中一个activity代码量太大问题,维护难的问题。
1.2 主要的技术要点
1.3 主要的开源框架介绍
- 1.3.1 网络请求框架
- Retrofit 是 Square 公司出品的默认基于 OkHttp 封装的一套 RESTful 网络请求框架。
- Retrofit 的封装可以说是很强大,使用 Retrofit + OkHttp + RxJava + Dagger2可以说是目前比较潮的一套框架。
- 1.3.2 注解框架
- butterknife,专注于Android系统的View注入框架
- 1.3.3 图片加载框架
- 谷歌原生glide,功能强大,使用方法以及源码分析可以参考郭霖大神博客:
- squareup公司出品的picasso也不错
- 图片加载在项目中许多地方都会用到,建议将所有的加载图片的方法整理成工具类,然后通过类静态调用方法,可以统一管理。那么使用的使用,就可以一行代码搞定,简洁代码。便于阅读与定位!
- 1.3.4 6.0之后权限申请框架
- 对于权限管理,可以直接使用谷歌原生权限框架,具体使用可以参考业余项目:https://github.com/yangchong211/YCAudioPlayer
- 1.3.5 事件总线框架
- 关于activity,fragment,service等不同组件直接通信,可以使用事件总线框架。关于事件总线EventBus使用以及源码分析,可以参考我的博客:https://www.jianshu.com/p/4cec5d7233e8
- 1.3.6 内存泄漏测试框架
- 使用squareup公司出品的leakcanary框架,项目测试阶段不仅要修改崩溃bug,也要避免内存泄漏问题。关于常见的内存泄漏场景与解决办法,可以参考我的博客Leakcanary检测内存泄漏汇总:https://www.jianshu.com/p/c345f63ec8e5
- 1.3.7 bug管理
- 可以使用腾讯出品的bugly,集成第三方bug管理平台,可以有效收集广大用户APP使用崩溃情况。
1.4 常用的第三方库说明与选择
- 注意:关于第三方库选择,只选择合适的,不选择代码量最多的库。比如有些库,代码很多,功能很强大,但是你只是用到一个很小的功能。倒不如选择轻量级的库。
- 1.4.1 上拉加载更多与下拉刷新
- 可以选择王浩大神BGA刷新,便于拓展
- 也可以使用封装库YCRefreshView,支持该功能,也支持多种状态切换
- 1.4.2 轮播图
- 可以用banner开源库,轮播图这块star最多,功能也很强大。代码量大,支持样式很多……
- 如果轮播图使用范围很小,且要求样式单一,可以使用自己封装库YCBanner。
- 1.4.3 关于页面刷新状态的管理
- 可以使用封装库YCStateLayout
- 1.4.4 常见的弹窗,吐司
- 待更新
- 1.4.5 常用工具类库
- 可以使用Blankj[布兰柯基]的开源工具库,GitHub颇受好评,一键集成与使用
- 1.4.6 其他库
- 待更新
2.项目中的代码规范【重要】
2.1 关于包名,类名,方法名,变量等命名规则
2.1.2 编码规范文档
2.2 日志打印
2.3 UI相关说明,资源文件string,color
3.项目中的常见业务分析
3.1 版本更新分析
4.关于代码解耦和抽离思索
4.1 业务代码避免耦合度过高
4.2 如何解耦
4.3 接口的分离
5.其他问题说明
5.1 版本更新情况
- v1.0.0 2018年1月17日
- v1.0.1 2018年2月8日
5.2 参考链接
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。