产品APP架构说明文档
目录介绍
- 1.关于项目架构的技术堆栈
- 1.1 该项目App整体架构
- 1.1.1 目前项目[准备中]使用的架构
- 1.1.2 市面常见的架构
- 1.1.3 MVP架构使用心得
- 1.2 主要的技术要点
- 1.2.1 视频播放技术
- 1.2.2 音频播放技术
- 1.2.3 复杂页面展示
- 1.2.4 状态切换
- 1.2.5 缓存
- 1.2.6 音视频文件下载技术
- 1.3 主要的开源框架介绍
- 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.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.2 日志打印
- 2.2.1 日志统一打印,测试打开,上线关闭
- 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.2.1 视频播放技术
具体可以参考我的视频播放器案例,记录视频播放中各个要点和代码逻辑思路,以及记录bug出现与解决办法,持续更新中。链接地址:http://www.jcodecraeer.com/plus/view.php?aid=9147
1.2.2 音频播放技术
具体可以参考我的音频播放器项目与笔记,记录音频的各种知识要点。关于音视频,涉及到编码解码的问题,比较复杂,比较复杂,链接地址:http://blog.csdn.net/m0_37700275/article/details/79256959
1.2.3 复杂页面展示
- 对于复杂页面,由于需求会变化,所以初期选择一定要支持拓展性强,功能强大。避免业务变化导致重新写代码,或者页面展示了,但是会出现页面卡顿,滑动冲突,或者代码内部混乱不便于维护。所以可以选择阿里Vlayout框架。关于如何使用以及案例展示,可以参考我的博客:http://blog.csdn.net/m0_37700275/article/details/79006266
- 对应的如何使用的项目有:https://github.com/yangchong211/YCVideoPlayer
对于一般list页面,一般不会太复杂。但是可能会有多种状态,比如刷新中,展示页面成功,加载数据失败,加载数据为空多种状态,且支持上拉加载下拉刷新。ok,则刚好可以使用之前封装库,YCRefreshView。项目使用和案例地址:https://github.com/yangchong211/YCRefreshView
1.2.4 状态切换
- 对于Android加载页面来说,有些项目将加载状态写在Base类中,如果是不继承那么会出现问题。如果写在布局中,然后根据数据访问情况展示或者隐藏不同状态的布局,也会比较复杂,比较凌乱。
后来,参考大神思路,让View状态的切换和Activity,fragment彻底分离开,必须把这些状态View都封装到一个管理类中,然后暴露出几个方法来实现View之间的切换。 在不同的项目中可以需要的View也不一样,所以考虑把管理类设计成builder模式来自由的添加需要的状态View。关于项目的使用可以参考我的封装库案例。地址是:https://github.com/yangchong211/YCStateLayout
1.2.5 缓存
1.2.6 音视频文件下载技术
1.3 主要的开源框架介绍
- 1.3.1 网络请求框架
- Retrofit 是 Square 公司出品的默认基于 OkHttp 封装的一套 RESTful 网络请求框架。
- Retrofit 的封装可以说是很强大,使用 Retrofit + OkHttp + RxJava + Dagger2可以说是目前比较潮的一套框架。
- 1.3.2 注解框架
- butterknife,专注于Android系统的View注入框架
- 1.3.3 图片加载框架
- 谷歌原生glide,功能强大,使用方法以及源码分析可以参考郭霖大神博客:http://blog.csdn.net/guolin_blog/article/details/53759439
- 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.1 包名与分包规则
- 包名:com.zero2ipo.sqdx
- 分包的结构如下所示
- 关于分包的规范以及注意事项,可以参考我整理的Android编码规范一文:http://www.jcodecraeer.com/plus/view.php?aid=9337
- 2.1.2 类名命名,类名规范,以及类名注释
- 2.1.3 方法名命名,规范以及注释
- 2.1.4 变量,常量命名规范及注意要点
2.1.2 编码规范文档
- 具体这一块命名规则可以直接参考另外一篇笔记:Android编码规范
2.2 日志打印
- 2.2.1 日志统一打印,测试打开,上线关闭
2.3 UI相关说明,资源文件string,color
- 2.3.1 对于UI中的字体颜色。可以参看新芽昊哥的做法,统一备注资源color属性。比如:
- 看到网上好多案例,发现对于这个color资源文件,定义不规范而且有点杂乱,引用的使用会有点苦恼。
- 2.3.2 关于这块,个人感觉非常不错,可以参考网易云音乐Android 3.0视觉设计规范文档:http://www.25xt.com/appdesign/12385.html
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 参考链接
- 安居客Android项目架构演进:http://blog.csdn.net/baron_leizhang/article/details/58071773
- 为什么要重视程序的架构设计:http://blog.csdn.net/johnny901114/article/details/54783106
- 基于MVP创建适合自己的架构:https://www.jianshu.com/p/2ca7767df08c
- 刘望舒大神,Android架构(一)MVP全解析:http://blog.csdn.net/itachi85/article/details/52293236
5.2 个人博客
- github: https://github.com/yangchong211
- 知乎: https://www.zhihu.com/people/yang-chong-69-24/pins/posts
- 简书: http://www.jianshu.com/u/b7b2c6ed9284
- csdn: http://my.csdn.net/m0_37700275
- 喜马拉雅听书: http://www.ximalaya.com/zhubo/71989305/
- 泡在网上的日子:http://www.jcodecraeer.com/member/content_list.php?channelid=1
- 邮箱:yangchong211@163.com
- 阿里云博客:https://yq.aliyun.com/users/article?spm=5176.100239.headeruserinfo.3.dT4bcV
版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/m0_37700275/article/details/79296188
产品APP架构说明文档相关推荐
- 0基础手把手教你开发探探类社交软件(Tinder项目产品架构说明文档)
目录介绍 1.关于项目App整体架构 1.1项目整体架构 1.1.1 目前项目使用架构 1.1.2 目前常见的架构 1.1.3 MVP架构优点及缺点 1.2.主要的技术要点 1.2.1 布局常用及技巧 ...
- Web产品的交互说明文档应该怎么写?
经常与开发同学聊天,他们说有一个详细的说明文档可以帮助他们更准确的进行工时评估,还可以帮助他们提高工作效率,减少多余的思考时间.因此在这里分享一些制作交互说明文档的经验. 我先说说说交互原型包含哪些部 ...
- “日历提醒app”程序说明文档
项目下载地址:日历提醒app 目录 文章目录 目录 一.项目概述 1.1 项目名称 1.2 项目用途 二.需求分析 三.功能说明 3.1 查看日历 3.2 添加日程提醒和日程信息 3.3 日程到点提醒 ...
- 移动应用APP架构文档
APP系统架构图 APP技术架构图
- 在线产品经理实习 任务三:给搜狐新闻24小时热点做一份产品说明文档
任务三:给搜狐新闻24小时热点做一份产品说明文档 一.任务简介及要求 出题人:苏伟 搜狐新闻高级产品经理 自从搜狐新闻APP推出了24小时热点后,反响还不错,数据也增长挺快的.市场部和销售部跟我们产品 ...
- 数据产品经理基础技能:数据需求说明文档怎么写?
公众号后台回复"图书",了解更多号主新书内容作者:草帽小子来源:一个数据人的自留地 作者介绍 @草帽小子 数据产品经理一枚~ 用户画像.埋点.指标体系.BI.广告投放等系列文章作者 ...
- 如何写好一份在线TOB的产品说明文档,这六点很重要
产品说明文档是指以文体的方式对某产品进行相对的详细表述,使人认识.了解到某产品.在线的产品说明文档则是将纸质的实体的说明书,迁移到互联网上方便供用户在购买前后了解产品以及正确的操作方式. 在线产品说明 ...
- 我的产品需求说明文档模板(PRD)
我的产品需求说明文档模板(PRD) 修订记录: 产品简介: 一句话介绍产品 产品目标: 介绍产品愿景,描绘产品蓝图 项目背景: 在什么背景下做这款产品?为什么要做这款产品?(马云爸爸说过"哪 ...
- java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...
[实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...
最新文章
- centos7 nginx安装_手把手教你PHP(一) Centos7上的LEMP配置
- Django(part14)--模板的继承
- CSS3笔记之定位篇(一)relative
- python数据库操作sqlite_使用Python对SQLite数据库操作
- SQL取分组中前、后几条数据
- 执行命令行并等待完成
- RAID0、1、5、6、10介绍
- Dynamics Ax 2012中调用外部web服务
- 多源信息融合技术研究综述
- TWaver阶段学习-入门篇
- 蒜厂年会|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
- 数据分析师有哪些证书?目前数据分析师都有哪些国际认证?
- css基础--float 的天然克星 clear/BFC
- 宝塔怎么看蜘蛛爬取日志
- 《详细》使用ventoy制作linux to go和win to go放在u盘中《即走即用的便携式系统》,自带系统引导
- python选股策略,金叉,死叉,绿色云
- 免费天气预报查询 API、历史天气查询 API 接口使用示例【源码可用】
- 论文阅读 (78):FlowNet: Learning Optical Flow with Convolutional Networks
- 【ZJOI 2009】狼和羊的故事
- 2015山东毕业生如何进行网上报道(报到证)?