最近看了微信Android模块化架构重构实践这篇文章,刚好自己又正在搭建新项目的框架,用到组件化开发;感觉文章里面的一些技巧很有用,就跟着实现了一下,写一下自己的看法
模块间的交互
首先是解决模块之前的依赖问题,模块间肯定是不能相互依赖的,那如何进行数据交互就是一个问题了;比如用户模块和其他模块,其他模块如何在不依赖用户模块的情况下获取到用户信息;
使用EventBus
想要获取用户信息,那User类肯定是要引用的,肯定是要提取出User类放到公共模块里面,然后获取User可以通过EventBus来获取数据
公共模块将EventBus发送的Event定义为接口
public interface UserCallback { /** * 获取用户数据 * * @param user */ void getUser(User user);}
然后在用户模块订阅事件,返回用户信息
@Subscribe public void getUser(UserCallback callback){ callback.getUser(new com.dhht.baselibrary.User()); }
在其他模块就可以通过EventBus来发送事件获取到用户信息
EventBus.getDefault().post(new UserCallback() { @Override public void getUser(User user) { mUser = user; }});
但是讲道理EventBus还是少用的好,业务多了会生成很多Event类,感觉是有点难受的,而且代码阅读起来非常难;
SPI机制
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。
具体的实现(可以略过)
首先也是把User放在公共模块里面,获取用户信息的接口也放在公共模块里面
package com.dhht.baselibrary;public interface UserService { /** * 获取user * * @return */ User getUser();}