loc-framework icon indicating copy to clipboard operation
loc-framework copied to clipboard

关于problemUtil的封装

Open Jxin-Cai opened this issue 6 years ago • 3 comments

问题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();
    }

}

Jxin-Cai avatar Jun 28 '18 13:06 Jxin-Cai

首先谢谢 提问!

我个人使用interface 暂时就是 就是 简化一部分代码, 如果有private 或者 protect的需求,估计还是得用回class。

然后具体data用什么方式, 我个人觉得这个就是仁者见仁 , 智者见智, 没有好坏之分。只要前后端定义好即可。

但是我个人觉得,如果返回数据的key不确定或者存在多个,这样可能会存在前端的统一代码不太好处理(需要通过调试才能得到具体的数据的key)

dragontree101 avatar Jun 29 '18 13:06 dragontree101

您好,首先感谢您的回答。对于第二个问题,其实无论哪种方法前端都需要知道所有种类数据的key,以便于取到值后做后续操作。我的问题是,如果用map封装多个数据对象(如list+page+condition).那每个返回都要new一个map,并put插入一个个数据。而反射直接取名插入可以省掉这一步。但反射并不高效。所以这样做适合吗?

Jxin-Cai avatar Jun 30 '18 12:06 Jxin-Cai

个人感觉 可以先进行代码层面的简化和开发效率的提高,避免代码的复杂性, 至于性能方面的问题, 我觉得是不是没有太多必要考虑在前期, 并且一般来说 反射消耗的性能对比于业务操作的性能来讲,微乎其微。 如果有这种多个返回字段的需要,您这种进一步的简化封装,跟有利于开发效率。 👍

dragontree101 avatar Jul 01 '18 01:07 dragontree101