可配置式数据字典解决方案
文章目录
需求和问题
- 字典表在数据库里面管理, 字典表可以由页面进行配置配置.
- 字典表是需要可配置的, 因此代码里面不能够有任何字典项信息, 那么字典表和代码衔接问题需要解决.
- 前后台接收发送数据字典的方式.
设计思路
- 要想使用数据库管理字典表首先需要建立字典表, 建立两张表, 一张管理字典类型信息, 一张管理字典项信息, 字典类型表和字典表为一对多关系.
- 字典表的使用需要和字段结合起来, 那么就需要字段表以便于配置字段和字典表的信息(如果不使用字段表的话, 那么只能在代码里面直接去使用字典的键去获取字典, 那么就不能够做到字典的配置, 只能够做到字典项配置. 这样的话字典类型势必会对代码造成侵入性, 不方便后续扩展和管理).
- 数据字典结合做成可配置式, 需要用到字段表, 字典类型表, 字典项表, 字段表确立字段和字典类型的关系, 这样就可以实现前台页面增删改查管理配置数据字典.
- 代码里面肯定会需要用到字典表数据, 而字典表是需要可配置的, 因此代码里面不能够有任何字典项信息, 在此通过枚举来管理数据字典, 这样还可以避免魔法值问题.
- 代码里面使用枚举会有很多问题, 在此使用解决方案 -> 巧用枚举让字典表的管理和使用变得简单, 优雅
- 代码里面无可避免会使用数据字典, 数据字典页面配置改变后, 项目里面可能会受到影响, 在此字典项表里面加入字段来判断当前数据字典是否在被代码使用, 如果在使用配置时则弹出提示信息.
- 数据字典配置后, 代码里面的枚举也需要改变, 如果使用人工编写枚举的话, 很容易造成失误, 而且特别麻烦, 在此采用velocity模型实时一键生成枚举, 实现数据字典和代码的良好衔接.
- 数据字典增删改次数少, 但查询次数巨大, 可以更改表引擎为MyISam和采用redis缓存来提高访问速度.
- 数据字典项表加入中英文标签, 支持中英文切换.
- 后台提供字典表获取统一接口, 前台提供字典表统一查询方法.
遗留问题
字典表配置更新后, 已经打开的页面来不及更新枚举
没什么好的方法, 设计好一点, 尽量在很少人使用的时候修改, 实在不行, 修改后后台直接报错, 或前台页面提示或刷新. 甚至修改时直接抛出个维护中的页面.字典表配置更新后, 用到该枚举的表字段数据该如何解决.
手动更改数据库吧
优点
- 数据字典可以由前台页面进行配置式管理.
- 使用枚举在开发时非常方便. 实现和数据库字典的衔接.
- 一键生成枚举实现开发时实时更新.
- 加入中英文标签, 实现中英文切换.
数据字典表设计
CREATE TABLE `sys_dict_item` (
`type` varchar(50) NOT NULL COMMENT '字典类别',
`value` varchar(