此文已由作者徐铭阳授权网易云社区发布。
欢迎访问
前言
最近在做需求过程中,一些类似学校选择、城市选择等业务相关模块想单独抽离出来,遇到一些诸如模块管理、通信方面的问题来
背景
最近有一个需求是学校列表,没错,就是我们平时总见到的类似微信通讯录的需求,单看这个需求的话实现不复杂,网上也会有一些类似的实现。
中M有一些个性化的需求,比如字母索引不是A~Z总共26个字母而是按照学校的名字,假设没有这个首字母拼音的话这个字母就是不展示的,所以在做这个需求的时候造了个轮子满足这个需求,不过这个不是本文要说的重点。
由于学校选择、通讯录、城市选择等类似的选择器功能基本通用,教育产品有好几个产品,不止中M可能还会有云课堂、K12等也会有类似的需求,所以关于这个选择器准备作为一个底层业务模块单独拆分出来,联想到之前做中M路由的时候写过业务模块管理相关代码,现在两个结合起来正好可以满足需求
需求
edu-android-select模块注册
SelectActivity处理完选择事件之后需要把处理结果返回给调用的上层业务
业务组件懒加载,不需要在app启动时初始化
解决方案
模块注册
framework启动统一使用配置文件注册,每个module配置application入口,该application有两个功能,作为各个模块路由分发入口,做一些初始化工作,当然除非是模块运行必须的功能,其他功能不建议放在该入口application中
业务模块提供的服务在每个模块application中注册,接口和实现分离方式,Map中保存键值对,键对应接口,值对应实现
framework统一管理所有的application和所有的service,上层业务想去获取某个service时通过ServiceManager获取,提供统一获取service方式
回调处理
ICommonService中定义提供外部的接口以及给外部的回调,接口和实现分离
业务service懒加载
每个application入口中注册该模块提供的服务
实现
如有问题欢迎指正交流
网易云
更多网易技术、产品、运营经验分享请