loc-framework
loc-framework copied to clipboard
关于problemUtil的封装
问题1:class和interface封装工具类除了代码默认简写外还有其他区别吗?因为interface没有private,所以还是喜欢用class写。 问题2:前后端分离后,数据用map封装放data好还是这样自定义好?
public class ProblemUtil {
public static Problem createProblem(Object... datas) {
ProblemBuilder builder = Problem.builder().withDetail("success").with("code", 0);
for(Object obj:datas){
String name = getName(obj);
builder.with(name,obj);
}
return builder.build();
}
public static Problem createProblem(String detail, Object... datas) {
ProblemBuilder builder = Problem.builder().withDetail(detail).with("code", 0);
for(Object obj:datas){
String name = getName(obj);
builder.with(name,obj);
}
return builder.build();
}
public static Problem createProblem(String detail, int code, Object... datas) {
ProblemBuilder builder = Problem.builder().withDetail(detail).with("code", code);
for(Object obj:datas){
String name = getName(obj);
builder.with(name,obj);
}
return builder.build();
}
private static String getName(Object obj){
String name = null;
if(obj instanceof List){
name = ((List) obj).get(0).getClass().getName()+"s";
}else {
name = obj.getClass().getName();
}
return tolowFirstCase(name.substring(name.lastIndexOf(".")+1));
}
private static String tolowFirstCase(String str) {
char[] c = str.toCharArray();
c[0] = (char) (c[0]-(32)); //ASCII
return c.toString();
}
}
首先谢谢 提问!
我个人使用interface 暂时就是 就是 简化一部分代码, 如果有private 或者 protect的需求,估计还是得用回class。
然后具体data用什么方式, 我个人觉得这个就是仁者见仁 , 智者见智, 没有好坏之分。只要前后端定义好即可。
但是我个人觉得,如果返回数据的key不确定或者存在多个,这样可能会存在前端的统一代码不太好处理(需要通过调试才能得到具体的数据的key)
您好,首先感谢您的回答。对于第二个问题,其实无论哪种方法前端都需要知道所有种类数据的key,以便于取到值后做后续操作。我的问题是,如果用map封装多个数据对象(如list+page+condition).那每个返回都要new一个map,并put插入一个个数据。而反射直接取名插入可以省掉这一步。但反射并不高效。所以这样做适合吗?
个人感觉 可以先进行代码层面的简化和开发效率的提高,避免代码的复杂性, 至于性能方面的问题, 我觉得是不是没有太多必要考虑在前期, 并且一般来说 反射消耗的性能对比于业务操作的性能来讲,微乎其微。 如果有这种多个返回字段的需要,您这种进一步的简化封装,跟有利于开发效率。 👍