app开发总结 3 - 架构设计
2016-06-27 23:13
288 查看
一、概述
架构:个人的理解,也就是对代码的组织、管理,好的便于后续维护、扩展,一个合理的架构有以下几点要素1,代码结构清晰,分包明确
2,接口少,精简
3,没有横向依赖,模块之间相互独立,不到万不得已不出现跨层访问
4,高性能,相对于服务端而言,app性能可放到最后,因为海量并发、大数据的处理都是有服务端完成
app的核心:获取数据、界面展示,其常见的流程为列表 -> 详情 -> 提交数据
二、分层设计
以下是本人的app架构设计:常见方式是三层架构,但个人认为app没什么复杂业务逻辑,因此精简成两层结构1,UI层:负责界面的展示,用户交互,通常在此层再做MVC的扩展,通过Controller对Model、View解耦,实现数据、展示分离
2,数据层:将主要负责数据的持久化、获取、缓存,并将数据交付给UI层,又分为接口层(如http、webservice…)本地数据层(如文件、sqlite、sharedpreference、userdefaults等….)
说明:MVX(MVC、MVP、MVVM的统称)模式的核心思想就是通过X来完成Model、View的解耦,实现数据、展示分离;
而MVVM只是侧重于数据绑定,发布-订阅模式,MVP则是对MVC的扩展,通过Presenter来完成Model、View的交互
三、包结构组织
app项目常见的包组织方式有两种:1,主目录按组件划分,二级目录再按模块划分
2,主目录按模块划分,二级目录再按组件划分(推荐方式)
四、UI层设计
1,在Controller、Activity的初始化方法中,应分为三个步骤initVariable //初始化变量 initView //初始化视图 loadData //加载数据
2,导航栏配置
3,一些通用样式的封装
4,加载框的处理
4.1 加载对话框
4.2 加载动画
4.3 上拉加载、下拉刷新
4.4 webview加载顶部进度条
五、数据层 - 接口层设计
接口主要分为http、webservice网络连接变化处理:
1,列表,应显示可以重新加载的动画或按钮
2,其它,toast提示无网络
3,下载,应该断点续传,且如果非wifi环境,需提示是否继续下载
统一接口回调:如果采用block、匿名内部类的方式,当一个界面调用接口过多时,则会存在以下问题
1, 难以维护、调试
2,避免延长ViewController、Activity的生命周期,导致内存回收不及时
ios:block会延长对象的生命周期,当ViewController从window中卸载时,如果此时请求未结束,并在block中引用了ViewController,则会造成ViewController无法被及时回收
android:匿名内部类作为接口回调,当Activity从window中卸载时,但请求未结束,并引用了Activity,同样会造成Activity无法及时回收
统一回调的实现方式有两种:
1,转发来达到间接实现统一回调
2,通过传递标识符,来完成统一回调
接口层在调用网络层请求时,可不采用统一回调;
但接口层在将数据交付给UI层时,建议采用统一回调(需标识不同api处理),便于UI层统一处理
六、数据层 - 本地数据层设计
本地数据层:主要用于缓存设计,主要目的有1,在断网时,不会显示一片空白,提高用户体验
2,将不经常变化的数据保存到本地,避免重复请求,减轻服务器负担
方式1(建议采用):用于提高用户体验,在断网时,不会显示一片空白
1, 第一次获取数据后,存储到本地sqlite
2,之后再次访问时,如果没网络,则显示本地sqlite缓存数据
方式2:将不经常变化的数据保存到本地,避免重复请求,减轻服务器负担
1,第一次获取数据后,存储到本地sqlite
2,之后直接访问本地sqlie
3,需要处理缓存同步的问题,可采用版本号、定时更新的实现机制
相关文章推荐
- Android MVP模式
- cocos2d-x基础——基本代码框架
- Android-ViewFlipper子界面自动轮播-学习笔记
- 浅谈Android实现3D旋转
- objective-C中的Class(类类型),Selector(选择器SEL),函数指针(IMP)
- json,jsonObject , jsonArray 详解
- android消息通知Noticication使用详解
- Android 使用Socket实现服务器与手机客户端的长连接五:使用队列封装请求
- java.lang.IllegalStateException:Web app root system property already set to different value 错误原因及解决 Log4j
- Ubantu系统下安装android studio的简单步骤
- App后台学习笔记
- IOS中关于Block的用法总结
- iOS 仪表式数字跳动动画-b
- Android permission 访问权限大全
- 深入浅出iOS事件机制
- Android仿QQ邮箱下拉刷新动画(三个小球围绕中心转动)
- XCode 7.2 真机调试 ios9.3系统遇到的 "could not find developer disk image "
- ios 多线程 -- NSOperation 常用方法
- android-BroadcastReceiver 发送有序广播
- Swift 与 JSON 数据