你还在定义不同的Model/Entity作为参数和返回值?(看完这篇教你一个类公用)

此篇只是作为一个小知识点分享,每周六/周日的文章还是会依旧的,可以关注我的微信公众号:xiaobei109208,每周一篇技术分享哦。

→手里的项目终于可以稍微缓一缓啦,感觉在家办公比在公司还要忙。你还在定义不同的Model/Entity作为参数和返回值?(看完这篇教你一个类公用) 

进入主题


        在日常开发中,很多同学可能都会有这种问题,编写了一个新增/修改的接口,定一个实体类(Model/Entry.java),但是在作为参数的时候,有些字段不需要前端提供又或者说再返回的时候有些系统字段并不想展示给前端。那很多同学的做法,就是定义两个差不多的实体类(Model/Entry.java),可这样又有一个问题,在新增或者查询返回的时候可以因为泛型不一致而需要重新创建实例,然后set值。

       看到这里,可能有的同学又说,哪用这么麻烦,Map包一切,Map作为参数,也作为返回值,想要给啥字段我说了算。

        emnnnnn.......抛开开发规范和前端联调的难度和后期维护,那是可以的,没问题。但是如果有更好的办法,还是值得学习一下的。

        而且不止阿里开发规范禁止使用Map作为参数和返回值的硬性规定,很多公司都是这样的,至于为什么?

1、(Model/Entry.java)在数据输入编译期就会对一些数据类型进行校验,如果出错会直接提示。而map的数据类型则需要到sql层,才会进行处理判断。

2、map的参数名称如果写错,也是需要到sql层,才能判断出是不是字段写错,不利于调试等。相对而言(Model/Entry.java)会在编译期间发现错误

3、map的参数值如果多传、乱传,也是需要到sql层,才能判断出是不是字段写错,不利于调试等。相对而言(Model/Entry.java)会在编译期间发现错误

4、仅仅看方法签名,你不清楚Map中所拥有的参数个数、类型、每个参数代表的含义。后期人员去维护,例如需要加一个参数等,如果项目层次较多,就需要把每一层的代码都了解清楚才能知道传递了哪些参数。


        现在再去手写接口文档已经很少的,集成swagger前端后端都方便,还有就是使用lombok简化代码量。好了,来看代码,我定义的Model

你还在定义不同的Model/Entity作为参数和返回值?(看完这篇教你一个类公用)

 

        这句注解是基于swagger的,它的场景是当你有的字段,在作为新增/修改的参数时候,不想前端传这些不必要的字段,但希望返回的时候会返回,那加上这个就可以了。

 

 新增/修改

你还在定义不同的Model/Entity作为参数和返回值?(看完这篇教你一个类公用)

查询返回

你还在定义不同的Model/Entity作为参数和返回值?(看完这篇教你一个类公用)

 

        那还要一种场景新增/修改展示,返回不展示,比如password,那怎么办?

 

        你返回的查询不查那个字段不就行了嘛?(机智你还在定义不同的Model/Entity作为参数和返回值?(看完这篇教你一个类公用)

 

 

END