我为啥会搞这个什么SOA系列安卓组件化?说白了,就是被上个项目给逼疯了。
那项目是个大单体应用,代码三四个人写了快两年。后来我接手,动哪儿哪儿就崩,稍微改个业务逻辑,半个应用都得重新测一遍。改个小需求,要等其他组的人都交完代码,合并完分支,一堆冲突等着你解,简直是噩梦。
我当时就拍桌子了,这活儿没法干!这不是在写代码,这是在挖坑。我当时就决定,必须想办法把这坨屎山给拆了。我就去网上瞎看,看到有人说什么组件化、模块化、还有这个听起来挺高大上的SOA(面向服务架构)。说白了,就是把大象切成小块,各管各的。
实践过程:从抠代码到搭桥
我当时也没想多,就是想把那个项目里最恶心人、最常改的“用户中心”模块给单独切出来。我回去就开了个新分支,直接动手,把用户中心相关的代码、资源、依赖,一样一样地往外抠,扔进了一个新的Android Library模块里。
第一次弄,肯定不顺。最头疼的就是模块之间怎么通信。以前直接调用,现在隔开了,直接访问肯定不行了。我当时想了几个办法:
- 最土的:用EventBus发广播。跑是跑起来了,但完全不知道是谁在监听,代码特别乱。立马就给否了。
- 后来看别人说,要搞个路由(Router)。得,我就自己学着写了个简陋的“中转站”模块,就叫它RouterBridge。
小编温馨提醒:本站只提供游戏介绍,下载游戏请前往89游戏主站,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
这个RouterBridge,我的想法很简单,就是个空壳子,专门用来定义接口和契约。比如,“用户中心”模块提供一个`UserService`接口,里面定义了`getUserInfo()`和`logout()`方法。其他想用这些功能的地方,就通过RouterBridge去“找”这个服务,这不就是SOA里说的服务调用嘛
我定义了接口,然后让“用户中心”模块去实现这个接口,并且注册到我的一个全局Map里面。当主App或者其他模块需要调用的时候,就去那个Map里捞对应的实现类,然后直接调用方法。这样模块之间就不直接依赖了,只依赖那个公共的RouterBridge接口层。
遇到难点:熬夜硬扛
刚开始切了两个模块,代码量最大的“用户中心”和“商城列表”。刚搞完那几天,联调的时候差点没吐血,各种找不到类,各种依赖冲突。我当时熬了三个通宵,一个地方一个地方去对Gradle依赖,去调资源ID冲突,去改Manifest文件里的各种配置。每一个Service Module我都给它独立的包名和Gradle文件。因为组件化了,每个模块就像一个小App,得单独编译,单独跑起来验证没问题才行。
实现:感觉轻松多了
现在回过头看,虽然当时过程很痛苦,但做完之后简直是神清气爽。现在只要改一个模块的代码,只编译这个模块,大大加快了编译速度。而且每个模块的代码逻辑都非常清晰,想加新功能?直接新建一个Service Module,在RouterBridge里定义好契约,让需要的模块去实现,然后注册,搞定收工。
再也没人因为改动了一行配置,导致整个工程崩溃到天上去。这就是我的SOA安卓实践记,从被迫到主动,一步步拆出来的经验。真想对以前那个大项目说一句,拜拜了您嘞!

