1. 背景
最近在写一个rpc的中间层,目前主要为了屏蔽jsf两个版本的差异,并为以后兼容dubbo提供基础。
2. 早期尝试
最早实现的方式是,依照Jsf当前的类抽象出对应的通用类,实现一套自定义的接口,异常及工厂类。
由此遇到的问题是:
- POJO转换比较繁琐;
- 工厂类的逻辑实现繁琐;
- 与具体实现耦合太高;
3. 最后方案
我把demo给阳哥review后,阳哥说这样耦合太重。整改如下:
- 改为简单的抽象接口,提高灵活度;
- 通过map传递参数;
- 把装配的逻辑放在底层实现;
- 把中间层做薄
接口定义如下:
public interface IRpcService {
<T> T createConsumer(Class<T> clazz, Map options);
<T> IProviderConfig<T> createProvider(Class<T> clazz, Map options);
}
4. 反思
针对第三方的组件做中间层,如果直接以代理的方式来实现会耦合太高,反之抽象出简单的接口,把中间层做薄,会更加的灵活