V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sma11hao
V2EX  ›  程序员

大家怎么看待数据字典,你们的项目里引入数据字典了吗

  •  
  •   sma11hao · 2023-02-07 11:08:39 +08:00 · 4641 次点击
    这是一个创建于 685 天前的主题,其中的信息可能已经有所发展或是发生改变。
    32 条回复    2023-02-08 11:19:15 +08:00
    dqzcwxb
        1
    dqzcwxb  
       2023-02-07 11:13:08 +08:00
    你是不是想说配置中心?
    route
        2
    route  
       2023-02-07 11:17:29 +08:00
    有用,在我看来就是常用的枚举
    devswork
        3
    devswork  
       2023-02-07 11:21:24 +08:00
    不光有,还得用户能在后台自己配置新增条目、删除条目,比如一些分类、单位,配置后可以返回给前端,用作单选、多选什么的,很常用
    sma11hao
        4
    sma11hao  
    OP
       2023-02-07 11:24:12 +08:00
    @dqzcwxb 不是,就是业务枚举居多,比如订单状态,然后客户端也都从服务端拿枚举数据
    defunct9
        5
    defunct9  
       2023-02-07 11:24:21 +08:00
    不懂就问,大家有什么好的数据字典、配置中心软件推荐
    sma11hao
        6
    sma11hao  
    OP
       2023-02-07 11:28:31 +08:00
    对各端来说感觉开发是简便了,想问问大家会不会有其它问题?然后各个系统间你们是维护到同一个地方的吗
    dqzcwxb
        7
    dqzcwxb  
       2023-02-07 11:29:44 +08:00
    @sma11hao #4
    简单做法:写数据库用 redis 做缓存或者直接写 redis hash 里去
    进阶做法:配置中心
    PEax
        8
    PEax  
       2023-02-07 11:33:53 +08:00
    有,我们这边是有一个技术中台,专门配置权限,字典这些。然后前端项目登录的时候引入值集并缓存,同时挂载到 window 上,一般都用在下拉选项啥的。挺方便的(产品自己配值集,可以减少前后端工作量,而且不容易出问题)
    PEax
        9
    PEax  
       2023-02-07 11:41:03 +08:00
    @PEax 忘记说了,使用的框架是 hzero
    treeAgain
        10
    treeAgain  
       2023-02-07 11:43:28 +08:00
    @PEax 我们这边之前也让这么做,但是我拒绝了,从前端层面来说,配置的字典在下拉框里可以,但是一般不会只是在下拉框里,有很多逻辑判断,比如 在某个状态需要做业务处理,那但凡有这种的就不好使了,前端依然需要自己做字典映射,工作并无减少,还增加了接口去做缓存
    hhjswf
        11
    hhjswf  
       2023-02-07 11:54:54 +08:00 via Android
    @PEax 不懂就问,有什么必要嘛,就不能上个缓存简单的从字典表读吗
    lscho
        12
    lscho  
       2023-02-07 12:54:45 +08:00 via iPhone
    @treeAgain 前端当然要接口获取字典了,我觉得工作量并没有增加,因为多写一个接口就不用维护字典了。而且字典本来就是要放在后台管理的,总不能字典变化了,前端再同步发个版吧。
    dfkjgklfdjg
        13
    dfkjgklfdjg  
       2023-02-07 13:03:48 +08:00
    @lscho #12 ,一些特殊业务逻辑判断的时候确实要同步重新发版。但是字典值规范好的话基本上不用这样做。
    javlib
        14
    javlib  
       2023-02-07 13:22:23 +08:00
    以前公司有个自己开发的,技术上也很简洁
    - 每个配置项用一个 java bean 表示
    - 存储以 json 方式存数据库
    - client 通过配置名 + 版本取数据
    - admin 端通过 java bean 生成一个简单的 crud 页面

    这个配置系统大部份是产品运营的人在用,比如活动页面的图片,字段变更之类的。

    缺点就是新增配置项要增加一个 java bean ,否则 admin 页面看不到新配置项的 crud
    wqhui
        15
    wqhui  
       2023-02-07 14:29:24 +08:00
    对于一些经常需要增加的选项值来讲还不错,如果只是起标签作用的枚举不用发版就能解决了,但如果对于一开始就能基本确定所有状态的枚举来说没必要。前后端肯定是通过接口来获取的,前端对字典的存在无感知,后端不同服务之间可以直接共享字典,或者更好一点的做法是每个服务维护自己的字典,然后也是走接口获取其它服务的字典内容
    sma11hao
        16
    sma11hao  
    OP
       2023-02-07 15:07:02 +08:00
    看来大家用到的居多,只是做大做小的区别,感谢大家分享。
    tairan2006
        17
    tairan2006  
       2023-02-07 16:35:54 +08:00
    准确来说是:修改枚举不需要修改代码的时候会用。

    有的枚举严格对应逻辑,这种写代码里都行。
    lizy0329
        18
    lizy0329  
       2023-02-07 17:01:25 +08:00
    数据字典,能说出这个东西的程序员至少在 40 岁以上
    devswork
        19
    devswork  
       2023-02-07 17:07:15 +08:00
    @lizy0329 #18 我是 90 后
    infun
        20
    infun  
       2023-02-07 17:11:19 +08:00
    wetalk
        21
    wetalk  
       2023-02-07 17:12:50 +08:00
    @infun 配置中心,和数据字典两码事儿喔
    james2013
        22
    james2013  
       2023-02-07 17:16:56 +08:00   ❤️ 1
    有的,很方便,避免字典值增删导致前后端发版,也避免了前端手写名称和值可能产生的问题
    数据库专门有表记录字典名称和值,提供 1 个字典接口给前端查询
    前端根据这个接口进行查询和展示
    如果某个字典要增加或者减少 1 个值,前后端代码都不需要改,只需要在表里增加或者删除该值就可以了
    theguagua
        23
    theguagua  
       2023-02-07 17:26:20 +08:00
    @james2013 一般会做成后台管理配置的,每个人都写表也太麻烦些
    litchinn
        24
    litchinn  
       2023-02-07 17:32:30 +08:00
    动态的都应该走数据字典呀,避免由于产品在这些东西上的改动导致要重新编码部署,这和使用动态的路由菜单我觉得是一个道理。
    但是楼上说的有逻辑处理的时候,比如要 switch 判断的时候,还是得写个枚举,在这一点上确实没啥好办法(也有可能我目前还没了解到更优秀的设计)。但是枚举的话最好也是前端从后端获取,这样改动的时候后端改就行了,减少工作和 BUG 。
    OP 说到的多个系统直接同步的问题,这个好像也只有靠规范了
    Bingchunmoli
        25
    Bingchunmoli  
       2023-02-07 18:47:47 +08:00 via Android
    @lizy0329 入门使用 ruoyi 就知道这东西了
    nothingistrue
        26
    nothingistrue  
       2023-02-07 19:33:53 +08:00
    这东西的重点不是用不用,而是如何管理。不管你用数据库+界面配置字典,还是常量配置字典,还是专用工具配置字典,一旦不妥善管理,一段时间后都不如手写键值对方便。

    通常,有 UI 的,code-name 键值对的场景是非常常见的,用数据字典统一管理会更方便点,当然具体上还要看你的需求。“数据字典+后台只保存 code”的好处是便于全局统一管理,但是跟业务的贴合度不一定好,尤其是到了一个 code 不止有 name ,还有其他属性的时候。另外对于静态数据,用硬编码的枚举会更好。
    soupu626
        27
    soupu626  
       2023-02-07 20:18:48 +08:00
    以前看过某 ERP 系统,数据库都是大宽表,搞元数据甚至元元数据,实际存储的字段都是 column+数字编号这种命名
    invisibleUser
        28
    invisibleUser  
       2023-02-07 20:24:28 +08:00
    @PEax 不太明白,比如下拉接口我需要显示{0:'未选择';1:'男';2:'女'};列表我需要显示:{0:'-';1:'男';2:'女'};这种 0 下标有差异化不还是要前端自己去判断吗,这种情况后端该如何返回
    xuanbg
        29
    xuanbg  
       2023-02-07 22:35:13 +08:00
    只做业务数据字典。做在公共基础数据中台里面,有个界面交给业务自己维护。
    treeAgain
        30
    treeAgain  
       2023-02-08 10:41:48 +08:00
    @lscho 事实是 确实是字典变化,前后端需要同步发版,看了一下帖子,基本都是站在服务端视角去评论的,认为只要给了字典数据就可以,事实是前端不只是下拉框的展示,也有逻辑业务
    我就举个简答的例子:给了 {0: ‘未完成’,1: ’已完成‘,2: ‘已取消’}
    1. 假如现在要加个 {3: '超时完成'},前端根据这个 3 去做展示或隐藏,你说需不需要发版
    2. 假如现在 0 变成了 超时未完成,那这个前端需不需要发版
    mynameislihua
        31
    mynameislihua  
       2023-02-08 10:48:46 +08:00
    @PEax 汉得是吧,我有朋友在那边做前端
    lscho
        32
    lscho  
       2023-02-08 11:19:15 +08:00 via iPhone
    @treeAgain 因为大家提到数据字典隐含的意思就不含逻辑啊,就是 key-value 的映射。。。。如果包含逻辑变化,那就不仅仅是数据字典的变化了,那是业务变化导致数据字典变化,必然要发版。

    大家讨论的数据字典是,比如 0 代表已结束,字典变化修改为已完结,这种。你说的 0 原本是已结束,变更为 0=待评价,这是逻辑发生变化了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5265 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 01:20 · PVG 09:20 · LAX 17:20 · JFK 20:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.