关于一个App的架构思考

对于一个App来说,不管大小,我们在开发的过程中或多或少,都会碰到下面罗列的各种模块,需要我们去处理。

  • 业务处理,对用户输入的校验和展现判断等
  • 统计处理,对当前App或者对业务的数据统计等
  • UI效果,包括主题配置,按钮,输入框,动画效果,自定义控件等
  • 更新升级,当前App的检查更新等
  • 服务器通信,与服务器通信获取数据,心跳连接等
  • 数据解析,比如对json,对xml等的解析等
  • 分享处理,分享到微信朋友圈
  • 通知消息,Notification处理
  • 数据存储,包括SharedPerference和SQLiteDatabase
  • 文件处理,对SDCard的读写
  • 异常处理,对DefaultUncaughtExceptionHandler的使用

这么多的模块,如何对这些模块进行设计,使得各模块间只需要负责自己的业务即可,比如在Activity中,只需要负责展现数据,至于这些数据是通过数据库,还是通过网络获取而来的,并不需要关心,而服务器通信模块,它也只需要去负责去服务器获取数据,并将数据给出去,同样,也不需要关心这数据给谁,它是怎么展现的,这就是所谓的解耦。

First

Created with Raphaël 2.1.0 Activity Activity HttpService HttpService 嘿,我要数据,这是id 稍等,这就去拿, loading by id 数据已拿到了,请拿去处理吧 嗯,可以更新界面了

这是我们所理解的流程,Activity直接调用HttpService,而HttpService直接跟服务器通信,然后获取数据,并告诉Activity,可以更新了,而Activity则拿到数据后,进行界面的更新,Done。

但是我们在代码中会在Activity中直接创建一个HttpService,然后调用HttpService.getData,比如下面这样

HttpService hs = new HttpService();
List data = hs.getData(id);
updateUI(data);

以上,我在做第一个App的时候,我就是这么做的。

Second

很显然,不会,作为Activity,我们不想知道你数据是怎么来的,我们只想知道有数据来,把数据给我们,让我们处理一下即可。
所以,我们会引入一个中间层 MsgDispatcher,它负责转发消息。
首先,声明两个消息,比如叫 MSG_GET_DATAMSG_GET_DATA_RESULT
之后,步骤如下:

  1. HttpService会绑定消息MSG_GET_DATA, 并将自己在MsgDispatcher上登记。
  2. 而 Activity则会绑定消息MSG_GET_DATA_RESULT,并将自己也在MsgDispatcher上登记。

大概就像下面这样:

Created with Raphaël 2.1.0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值