1. 背景
最近在寫一個rpc的中間層,目前主要為了屏蔽jsf兩個版本的差異,并為以后兼容dubbo提供基礎(chǔ)。
2. 早期嘗試
最早實現(xiàn)的方式是,依照J(rèn)sf當(dāng)前的類抽象出對應(yīng)的通用類,實現(xiàn)一套自定義的接口,異常及工廠類。
由此遇到的問題是:
- POJO轉(zhuǎn)換比較繁瑣;
- 工廠類的邏輯實現(xiàn)繁瑣;
- 與具體實現(xiàn)耦合太高;
3. 最后方案
我把demo給陽哥review后,陽哥說這樣耦合太重。整改如下:
- 改為簡單的抽象接口,提高靈活度;
- 通過map傳遞參數(shù);
- 把裝配的邏輯放在底層實現(xiàn);
- 把中間層做薄
接口定義如下:
public interface IRpcService {
<T> T createConsumer(Class<T> clazz, Map options);
<T> IProviderConfig<T> createProvider(Class<T> clazz, Map options);
}
4. 反思
針對第三方的組件做中間層,如果直接以代理的方式來實現(xiàn)會耦合太高,反之抽象出簡單的接口,把中間層做薄,會更加的靈活