前后端业务枚举映射问题解决方案

前后端业务枚举映射问题解决方案

这个问题其实和我们遇到的时间格式转换类似。

数据库存储业务标识为方便计算或判断,多为 数字字母 ,这类数据在返回给前端做展示的时候,需要转换成对应的业务标识说明,如币种在数据库中可能存储 CNY,实际我们展示的时候,有可能需要将其转成中文 人民币 来进行展示,这时,便有了前后端业务枚举映射的问题。

方案建议

这里我列举一些可行的方案建议,并对其简要说明优缺点,仅供参考

方案一:前端转义

前端负责全部转义职责,解决思路很简单,将所有数据库保存的值直接返回给前端,前端根据上下文对枚举值进行相关的业务说明映射;

示例

如数据库存储数据如下,很简单的拟造数据样例。

数据说明:state 1 表示数据处理成功,state 0 表示数据处理失败

idstatedate
112021-1-26 10:49:04
202021-1-26 10:51:33

后端在查询后,将数据结果直接返回给前端,前端在接收到该值后,页面渲染时,将数据进行转义处理,最终结果

idstatedate
1成功2021-1-26 10:49:04
2失败2021-1-26 10:51:33
优点
  • 后端代码无冗余代码,职责清晰,不负责转义相关内容。
  • 静态页面可随时更新枚举项映射关系,不需要服务端参与。
缺点
  • 前端需维护全部的业务枚举
  • 需要前端所使用的框架支持按行渲染,否则需要开发人员自行开发相关渲染转义逻辑。

方案二:通过增加 getStr 转义方法

增加 getStr 方法转义就是根据返回的数值或字母,将其映射后再返回,这步需要增加对应转义 str 字段,前端取该字段做展示即可。当然这步也可将 str 作为数据库字段存储。需根据数据量酌情考虑。

对于前端获取枚举列表的话,可以开发接口将后端使用的枚举映射缓存提供给前端进行使用。前端直接通过本地存储即可,可应对分离开发场景下的独立部署缓存问题。通过直接刷新浏览器本地缓存来解决。

示例

如数据库存储数据如下,很简单的拟造数据样例。

数据说明:state 1 表示数据处理成功,state 0 表示数据处理失败

idstatedate
112021-1-26 10:49:04
202021-1-26 10:51:33

实体类写法如下,已省去其他无关代码

private String state;
private String stateStr;

public String getState() {
    return state;
}
public String getStateStr() {
    return cache.get(state);
    return state == 1 ? "成功" : "失败";
}

state == 1 ? "成功" : "失败" 的映射逻辑可通过缓存实现,提高代码整洁性,维护性。

优点:
  • 前端不需要参与转义工作,直接获取 str 字段进行展示即可
缺点:
  • 需在实体类补充相关代码,并维护好映射关系。

方案三:通过枚举转义

这种方式和 方案二 类似,不过其更加方便维护。这要得益于现在的 ORM 框架的表现。

示例

定义映射枚举类

public enum State {
    SUCCESS(1, "成功"),
    FAIL(0, "失败");
    
    @EnumValue
    private final int value;
    private final String descrip
        
}

实体属性使用枚举类型

public class Obj {
    // 使用定义好的枚举类
    private State state;
}
优点
  • 较好的封装性,代码整洁,可读性较高
缺点
  • 需要编写大量枚举类
  • 需要 ORM 框架的支持
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值