公司的一个半老存储项目,之前是以web形式提供服务的,现在要增加一个SDK调用方式,两者共用数据库,只是接口不太一样,所以在新增controller时要求尽量复用原来的Service系列方法。这时发现了一个问题。
方法调用链上,老代码很多是这样操作的:
public class Test {
public static void main(String[] args) {
String res = firstFunction("hhhhhhh");
System.out.println(res);
}
public static String firstFunction(String firstParam) {
// action
String processFirst = firstParam + ":processDone ";
return secondFunction(processFirst);
}
public static String secondFunction(String secondParam) {
// action
String processSecond = secondParam + ":processDone ";
return thirdFunction(processSecond);
}
public static String thirdFunction(String thirdParam) {
// action
String processThird = thirdParam + ":processDone ";
return processThird;
}
}
咋看可能并不觉得有什么问题。但是假如我现在新的controller在处理同样数据时,因为返回数据的差异,在thirdFunction不再返回String类型数据,而是Integer,那么调用链上的所有方法都得修改return为Integer,但是这样又破坏了原有controller对这些方法的使用;假如现在只要firstFunction和secondFunction方法,已经处理完,不需要执行thirdFunction方法,那么secondFunction的return thirdFunction(processSecond);
就有问题了。这种调用链不是一种好方法。改成下面这样比较好:
public class Test2 {
public static void main(String[] args) {
String res1 = firstFunction("hhhhhhh");
String res2 = secondFunction(res1);
String res3 = thirdFunction(res2);
System.out.println(res3);
}
public static String firstFunction(String firstParam) {
// action
String processFirst = firstParam + ":processDone ";
return processFirst;
}
public static String secondFunction(String secondParam) {
// action
String processSecond = secondParam + ":processDone ";
return processSecond;
}
public static String thirdFunction(String thirdParam) {
// action
String processThird = thirdParam + ":processDone ";
return processThird;
}
}
每个方法都可以独立修改,就不存在上面的问题了。
网友评论