app开发总结 3 - 架构设计

一、概述

架构:个人的理解,也就是对代码的组织、管理,好的便于后续维护、扩展,一个合理的架构有以下几点要素
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,需要处理缓存同步的问题,可采用版本号、定时更新的实现机制

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值