您的位置:首页 > 移动开发

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,需要处理缓存同步的问题,可采用版本号、定时更新的实现机制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: