大家今天又来跟大家唠唠嗑,分享点我最近折腾的东西。话说回来,安卓开发这摊子事儿,越往后做,越觉得水深。之前那个项目,代码量一大,那家伙,简直就是一锅大杂烩,改个小地方都提心吊胆的,生怕一不小心就捅了马蜂窝,连带着其他地方也跟着崩。那段时间,真是头大。
我寻思着,这不行,得想个法子。之前也模模糊糊听过啥SOA,面向服务架构之类的,说是能让系统更有弹性,更模块化。听着挺玄乎,一开始我也没太当回事,觉得那是搞后端大家伙们玩的。但后来一琢磨,安卓应用复杂起来,不也跟个小系统似的?模块之间要是能像服务一样,各管一摊,互不干扰,那维护起来不就省心多了?
我就抱着试试看的心态,开始研究怎么在安卓上搞这个“SOA续集”。咱安卓上搞这个,跟后端那种可能还不太一样,我主要琢磨的是怎么把App内部的各个功能模块给拆分清楚,让它们自个儿玩自个儿的,需要协作的时候再打个招呼。
第一步,就是梳理我那团乱麻一样的代码。我把App的主要功能都列了出来,比如用户模块、数据同步模块、消息通知模块、还有几个核心的业务功能模块。以前这些玩意儿,你中有我,我中有你,牵一发动全身。现在我的目标就是把它们一个个摘出来,变成相对独立的“服务单元”。
说起来容易做起来难。我对着一堆代码,真有点无从下手的感觉。哪些算一个“服务”?边界在哪儿?这玩意儿没个标准答案,全靠自己摸索和项目的实际情况。我就想,一个“服务”至少得是能独立完成一块特定功能,并且这块功能跟其他部分的耦合度越低越
小编温馨提醒:本站只提供游戏介绍,下载游戏推荐89游戏,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
然后我就开始动手了。比如用户模块,我把它拎出来,所有跟用户登录、注册、信息修改相关的逻辑,都归它管。数据同步模块也是,专门负责跟后台拉数据、存本地这些事儿。这么一拆,感觉思路清晰了不少。
接下来就是这些“服务”之间怎么沟通的问题了。总不能老死不相往来?
比如说,用户登录成功了,用户“服务”就发一个“登录成功”的事件。数据同步“服务”监听到这个事件后,就可以开始去拉取这个用户的专属数据了。消息通知“服务”也可以根据这个事件去初始化推送相关的设置。你看,这样一来,大家各司其职,通过事件来协调,耦合度就下来了。
过程中也踩了不少坑。最大的坑就是“度”的把握。
有时候拆得太细,一个鸡毛蒜皮的小功能也给它整个“服务”,结果搞得比以前还复杂,调用链条老长,自己都绕晕了。后来慢慢调整,有些功能相似或者关联紧密的,就又给它们合并回去,力求一个平衡。
还有就是,一开始对“服务”的接口定义得不够清晰,导致后来改起来还是麻烦。这就吸取教训了,接口定义一定要想明白,输入输出是能干啥不能干得清清楚楚。
但这么一通折腾下来,效果还是挺明显的。最直观的感受就是:
感觉就像以前家里东西乱堆,找个啥都费劲。把东西分门别类放进不同的储物箱,贴上标签,一下子就井井有条了。虽然整理的过程费了点劲,但用起来是真舒坦。
这回“SOA续集安卓”的实践,虽然谈不上是什么高深莫测的技术革新,但对我来说,是解决实际问题的一个挺有效的思路。它更多的是一种架构上的思考方式,怎么把复杂问题拆解开,怎么让各个部分更独立、更专注。
也不是说所有安卓项目都得这么搞。小项目可能没必要,反而增加了复杂度。但如果你的项目已经有一定规模,感觉快要失控了,那不妨试试从“服务化”的角度去重新审视一下你的代码结构,说不定会有惊喜。
这也就是我个人的一点实践记录和心得,说得比较口语化,希望能给大家一点启发。下次再有啥折腾的,再来跟大家分享!