1
猿与故事
今天的故事发生在程序猿菜菜身上。
凡是对接过三方的都知道,代码中难免要加载很多三方分配的证书等相关配置文件。
菜菜同学每天的工作便是与三方对接,而且这次的任务是接入 N 套证书相关配置文件。考虑到后期易于上线,于是菜菜开启了从硬编码到易维护的代码优化之路。
2
情景再现
由于特殊的接入诉求,需要获取到证书及属性文件的输入流,你平时都是怎么实现的呢?
菜菜同学代码实现如下。
public static boolean initEnv() {
Map<InputStream, InputStream> map = Maps.newHashMap();
InputStream certLsStream = NewB.class.getResourceAsStream("/cool/ls/cert_ls.key");
InputStream configLsStream = NewB.class.getResourceAsStream("/cool/ls/config.properties");
map.put(certLsStream, configLsStream);
// ... ...
// 采用 map 进行后续特殊操作(省略)
// ... ...
return true;
}
菜菜通过 Xxx.class.getResourceAsStream("") 轻松实现。
但是,后期业务扩展,三方接入的证书配置会很多,该怎么办?
这当然难不倒菜菜同学,发挥一下 CV 大法,于是乎一坨硬生生的代码出现了(估计有很多同学都这么干,🤭)。
public static boolean initEnv() {
Map<InputStream, InputStream> map = Maps.newHashMap();
InputStream certLsStream = NewB.class.getResourceAsStream("/cool/ls/cert_ls.key");
InputStream configLsStream = NewB.class.getResourceAsStream("/cool/ls/config.properties");
map.put(certLsStream, configLsStream);
InputStream certZsStream = NewB.class.getResourceAsStream("/cool/zs/cert_zs.key");
InputStream configZsStream = NewB.class.getResourceAsStream("/cool/zs/config.properties");
map.put(certZsStream, configZsStream);
InputStream certWwStream = NewB.class.getResourceAsStream("/cool/ww/cert_ww.key");
InputStream configWwStream = NewB.class.getResourceAsStream("/cool/ww/config.properties");
map.put(certWwStream, configWwStream);
InputStream certSqStream = NewB.class.getResourceAsStream("/cool/sq/cert_sq.key");
InputStream configSqStream = NewB.class.getResourceAsStream("/cool/sq/config.properties");
map.put(certSqStream, configSqStream);
InputStream certZlStream = NewB.class.getResourceAsStream("/cool/zl/cert_zl.key");
InputStream configZlStream = NewB.class.getResourceAsStream("/cool/zl/config.properties");
map.put(certZlStream, configZlStream);
// ... ...
// 采用 map 进行后续特殊操作(省略)
// ... .