Android组件化框架设计与实践

在目前移动互联网时代,每个 APP 就是流量入口,与过去 PC Web 浏览器时代不同的是,APP 的体验与迭代速度影响着用户的粘性,这同时也对从事移动开发人员提出更高要求,进而移动端框架也层出不穷。

服务端与移动端对比

上图显示的是传统的服务端架构和客户端 App 架构对比。传统的服务端架构中最底下是一个 OS,一般是 Linux,最上面服务端的业务,而中间有非常多的层次可以在架构上,按照我们的意愿搭建中间的各个层次的衔接环节,使得架构具有足够的灵活性和扩展性。但是到了 App 就会面对一个完全不同的现状,App 的OS(Android或iOS)本质上并不是一个很瘦的像 Linux 这样的 OS,而是在 OS 上有一个很重的 App Framework,开发一个普通的客户端应用所要用到的绝大多数接口都在 Framework 里,而上面的业务也是一个非常复杂多样化的业务,最后会发现“架构”是在中间的一个非常尴尬的夹心层,因为会遇到很多在服务端架构中不需要面临的挑战。比如以下两点:

  • 体积的制约。体积对用户来说是一个非常敏感的概念,如果我们要在架构上做很多事情的话,通常意味着架构占据的代码量会比较大。在服务端架构中我们可以容忍我们在架构层面去做几十兆的代码。但是对于客户端架构,即使你的架构只有一两兆,对于一个客户端可能都占据了 10%,20%的容量。
  • 性能的挑战。从性能上来看,对于服务端架构我们通常关注的是吞吐率,我们不会去关注启动速度。一个服务端的启动哪怕是花了一两分钟,只要它运作起来吞吐率足够高,支持的并发能力足够好,响应速度足够快,我们就认为这是一个良好的架构。但客户端不同,客户端的进程对用户而言,往往是一个栈态的,手机里面使用完一个应用,退出之后可能过不了多久就会被回收掉,当用户下次再打开的时候,它会再次启动进程,需要重新完成一次初始化的流程。如果在这个上面做了很多事情的话,会导致程序启动的速度会很慢,在很多用户看来,这就是一种不可接受的用户体验。

客户端 APP 与服务端在架构上是有着一定的区别,在选择对客户端架构需要谨慎对待,需要有许多权衡的条件,在此前提上,是否有一种归一的方式呢,可以分而治之,并行开发,把业务分隔成一个个单独的组件,整个架构围绕组件开发,构建也是组件,一切皆组件。答案是有的,那就是打造客户端组件框架。

起源,为何组件化

客户端 APP 自身在飞速发展,APP 版本不断迭代,新功能不断增加,业务模块数量不断增加,业务上的处理逻辑越变越复杂,同时每个模块代码也变得越来越多,这就引发一个问题,所维护的代码成本越来越高,稍微一改动可能就牵一发而动全身,改个小的功能点就需要回归整个 APP 测试,这就对开发和维护带来很大的挑战。同时原来APP 架构方式是单一工程模式,业务规模扩大,随之带来的是团队规模扩大,那就涉及到多人协作问题,每个移动端软件开发人员势必要熟悉如此之多代码,如果不按照一定的模块组件机制去划分,将很难进行多人协作开发,随着单一项目变大,而且 Andorid 项目在编译代码方面就会变得非常卡顿,在单一工程代码耦合严重,每修改一处代码后都需要重新编译打包测试,导致非常耗时,最重要的是这样的代码想要做单元测试根本无从下手,所以必须要有一个更灵活的架构去代替过去单一工程模式。

同样这样的问题在我们工作具体项目中处处碰到,就拿我们组内负责的某个移动端 APP 来说,就碰到如下几个问题:

  1. 代码量膨胀,不利于维护,不利于新功能的开发。
  2. 项目工程构建速度慢,在一些电脑上写两句代码,重新编译测试的话编译速度起码 10-20 分钟,有的甚至更长。
  3. 不同模块之间代码耦合严重,比如消息模块严重耦合视频模块,如果修改视频模块,相应的消息模块也需要修改,不然会产生一连串问题。
  4. 每个模块之间都有引用第三方库,但有些第三方库版本不一致,导致打包 APP 时候代码冗余,容易引起版本冲突。
  5. 有些定制项目如果只需要消息模块,其他模块不需要的话,做不到按需加载打包,因为模块之间有互联依赖。
  6. 现有项目基于以前其他人项目基础上开发,经手的人次过多,存在着不同的代码风格,项目中代码规范乱,类似的功能写法却不一样,导致不统一。

项目工程架构模式改变是大势所趋,那又该如何做呢?那就是:打造组件化开发框架,用以解决目前所面临问题,在讲解如何打造之前,需要谈谈组件化概念,组件化框架是什么。

概念,组件化是什么

问:什么是组件,什么是组件化?

答:在软件开发领域,**组件(Component)**是对数据和方法的简单封装,功能单一,高内聚,并且是业务能划分的最小粒度。举个我们生活中常见的例子就是电脑主板上每个元件电容器件,每个元件负责的功能单一、容易组装、即插即拔,但作用有限,需要一定的依赖条件才可使用。如下图:

电容元件

那么同样,组件化 就是基于组件可重用的目的上,将一个大的软件系统按照分离关注点

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值