考虑SomeService.class中的follow方法
List<SomeObject> getSomeObjectDetails(String s){
someRepo.get(s);
}
现在让我们说我想拥有一个可以关闭或打开的功能标志,并且根据其值,它将执行不同的操作。我发现这样做的方法是使用简单的if
List<SomeObject> getSomeObjectDetails(String s){
if(someFeatureFlag == false){
someRepo.get(s);
} else {
newRepo.get(s);
}
}
我发现这段代码令人震惊,并且想到了使用功能标记干扰来维护不同代码版本的想法。 仅基于功能标志遵循正确的代码路径,此方法是否有更好的方法?
答案 0 :(得分:1)
Map
:
Map<Boolean, Function<String, List<SomeObject>>> map = new HashMap<>();
map.put(false, someRepo::get);
map.put(true, newRepo::get)
以及以后的用法:
List<SomeObject> getSomeObjectDetails(String s, boolean someFlag){
return map.get(someFlag).apply(s);
}
如果您认为以后可以有更多案例,请考虑引入enum
:
enum Version {
FIRST,
SECOND,
THIRD
}
FirsRepo fr = new FirsRepo();
EnumMap<Version, Function<String, List<SomeObject>>> map = new EnumMap<>(Version.class);
map.put(Version.FIRST, fr::get);
// all others...
List<SomeObject> getSomeObjectDetails(String s, Version version){
map.get(version).apply(s);
}