关于“状态”字段在页面显示的一次代码优化

1.问题描述

如图,很显然,订单状态,支付状态,这种由数字表示其语义的字段,是不应该这么直接显示到页面上,

例如,0代表新订单,1代表已下单等等,因此我们需要进行做一层处理。

 

 

 

 

 

2.关于流程

(1)从数据库查出数据

(2)在代码逻辑中进行对象的转换,PO对象转换为DTO对象,

(3)前端拿到DTO对象,显示在页面

提示:使用枚举定义常量,对于订单状态,支付状态,都有相应的枚举类;

 

 

 

 

3.解决方案

第一次解决方案

在很久以前也遇到过这种状况,但是项目里并没有关于状态常量的定义类,因此在当时,我采用了一个最笨的办法;

在PO对象与DTO对象的转换时,也就是从PO对象get字段时,我对取出来的字段进行一层if else判断,

如果取出来的是“0”,那么存入DTO对象中为“新下单”,

否则取出来的是“1”,那么存入DTO对象中为“已完成订单”。。。。。。。。。。。。

这个操作,现在想想有点傻傻的,哪怕不从代码可拓展性的角度来看,如果状态过多,有0,1,2,3,4,5。。。。。,天知道我要做多少个if else;

hahhh,但是只有经历过最傻的怎么写,才会有第二次解决方案,第三次解决方案。

第二次解决方案

这次的项目里使用枚举来进行常量的定义;

因此,想到了可以在枚举类中编写一个方法:通过code来获取到对应的枚举的方法;

 

 

问题:在哪里进行该方法的调用呢

在DTO类中进行该方法的调用;

为什么呢?

因为天知道,其他地方还有没有使用这两个状态的了,如果有,岂不是还要重新再写一遍逻辑?因此把调用方法放在DTO类中,也就是根源上;

当然,在DTO类中只是进行一个枚举类方法的调用,因为DTO类中按照规范是不可以进行业务逻辑的处理的;

 

 

 

 

第三次解决方案

 问题:对于其他状态的枚举类,比如支付状态的枚举类,难道也要再写一个方法吗?这岂不是重复写代码吗?

因此,可以这样做;

将根据code获取对应的枚举的方法,再进行一次抽象,参数上可以指定枚举类,进行获取对应的枚举;

(1)定义一个接口,将两个枚举类实现这个接口

 

 

(2)编写工具类,写一个抽象的方法

 

 (3)在DTO中调用该方法

 

 @JsonIgnore注解:对该属性起到隐藏的作用,生成json时,忽略此属性;

 

最终结果

 

 

 

 

 

 

posted @ 2019-11-12 14:24  inu6  阅读(253)  评论(0编辑  收藏  举报