当前位置:网站首页>配置筛选机
配置筛选机
2022-07-01 21:45:00 【haohaounique】
在文章中,比较多的灵感来源于筛选谷物花生,筛选机等筛选机的结构
比较多的开发工作中,涉及业务分支和同一业务不同逻辑的,会比较适合下面模型:从大到小(漏斗结构) 或从小到大(倒漏斗结构) 或一次性选择(选择维度,获取维度参数)

维度:可以统一看成一个关键的参数或者多个参数组成的参数
1.基于A维度下,做选择或者在维度下设计维度参数
2.不做维度配置,但根据维度来做相同业务逻辑的不同操作
具体表设计如下:
配置同一业务的顶级类-->具体业务类--->获取具体的处理模型--->获取具体的参数表达式
create table check_expression
(
id int auto_increment
primary key,
business_type varchar(20) null comment '业务类型',
check_model varchar(20) null comment '校验模型',
check_expression text null comment '表达式',
check_expression_name varchar(200) null comment '表达式名称',
status tinyint default 1 null comment '0-失效 1-生效',
create_time datetime null comment '创建时间',
create_by varchar(60) null comment '创建人',
update_time datetime null comment '更新时间',
update_by varchar(60) null comment '更新建人'
)
comment '校验表达式';
create table check_config
(
id int auto_increment
primary key,
business_key varchar(100) null comment '业务key',
business_type varchar(20) null comment '业务类型',
business_name varchar(100) null comment '业务名称',
check_word varchar(100) null comment '校验关键字',
check_word_name varchar(100) null comment '校验关键字名称',
check_model varchar(20) null comment '校验模型',
check_model_name varchar(200) null comment '校验模型名称',
check_class varchar(500) null comment '业务类',
check_expression text null comment '校验表达式',
check_order tinyint default 1 null comment '校验顺序',
check_msg text null comment '提示语',
status tinyint default 1 null comment '0-无效 1-生效',
fresh_status tinyint default 0 null comment '0-未刷新 1-刷新中,2-已刷新',
try_times tinyint default 0 null comment '刷新次数,线程池处理',
fresh_time datetime default CURRENT_TIMESTAMP null comment '上次刷新时间',
create_time datetime null comment '创建时间',
create_by varchar(60) not null comment '创建人',
update_time datetime null comment '更新时间',
update_by varchar(60) null comment '更新建人'
)
comment '校验配置' auto_increment = 9;
create index id_business_key
on check_config (business_key);
create index id_business_type
on check_config (business_type);
create index id_check_model
on check_config (check_model);
create index id_create_by
on check_config (create_by);
create index id_fresh_status
on check_config (fresh_status);
create index id_status
on check_config (status);
create table business_class
(
id int auto_increment
primary key,
business_type varchar(20) null comment '001-校验',
business_model varchar(20) null comment '业务模型',
business_name varchar(200) null comment '业务名称',
business_class varchar(500) null comment '业务类',
status tinyint default 1 null comment '生效状态',
create_time datetime null comment '创建时间',
create_by varchar(60) null comment '创建人',
update_time datetime null comment '更新时间',
update_by varchar(60) null comment '更新建人'
)
comment '业务配置类' auto_increment = 9;
create index id_business_model
on business_class (business_model);
create index id_business_type
on business_class (business_type);
create index id_status
on business_class (status);核心代码(此处仅展示配置化校验代码):
思想:第一步获取核心配置
第二步:根据配置做业务处理
List<CheckConfig> checkList = checkConfigService.getCheckList(map, map.get("business_key"));
boolean checkResult = checkConfigService.checkConfigList(checkList, map); public boolean checkConfigList(List<CheckConfig> checkList, Map<String, String> map) {
if (CollectionUtils.isNotEmpty(checkList)) {
for (CheckConfig checkConfig : checkList) {
ICheckService checkService = CACHE_CHECK_CLASS.getIfPresent(checkConfig.getCheckClass());
if (checkService == null) {
checkService = SpringBeanUtils.getBeanByName(checkConfig.getCheckClass(), ICheckService.class);
if (checkService == null) {
throw new BusinessException(500, CommonUtils.getStringBuilder().append("checkConfigList bean未配置:").append(checkConfig.getCheckClass()).toString());
}
CACHE_CHECK_CLASS.put(checkConfig.getCheckClass(), checkService);
}
boolean param = checkService.checkParam(checkConfig, map);
if (param) {
map.put("check_code", CODE_500);
map.put("check_result", Boolean.FALSE.toString());
map.put("check_msg", checkConfig.getCheckMsg());
map.put("remark", CHECK_NOTICE_MSG);
return true;
}
}
}
return false;
}以上文章读懂不是很简单也不是很难;能够理解对于开发会是非常便捷的,不仅能优化别人同时也能优化自己(毕竟在实际项目中运用)
边栏推荐
- Basic knowledge of ngnix
- The difference between NiO and traditional IO
- Communication between browser tab pages
- 二叉树的基本操作
- 使用闭包实现点击按钮切换 toggle
- mysql 学习笔记-优化之SQL优化
- 辅音和声母的区别?(声母与辅音的区别)
- Show member variables and methods in classes in idea
- Medium pen test questions: flip the string, such as ABCD, print out DCBA
- Mysql——》Innodb存储引擎的索引
猜你喜欢

Manually implement function isinstanceof (child, parent)

上半年暂停考试要补考?包含监理工程师、建筑师等十项考试

Mask wearing detection method based on yolov5

【目标跟踪】|单目标跟踪指标

Introduction and download of the latest version of airserver2022

小 P 周刊 Vol.11
![[intelligent QBD risk assessment tool] Shanghai daoning brings you leanqbd introduction, trial and tutorial](/img/ac/655fd534ef7ab9d991d8fe1c884853.png)
[intelligent QBD risk assessment tool] Shanghai daoning brings you leanqbd introduction, trial and tutorial

按照功能对Boost库进行分类

Classify boost libraries by function

Is PMP certificate really useful?
随机推荐
Icml2022 | interventional contrastive learning based on meta semantic regularization
Smart micro mm32 multi-channel adc-dma configuration
【MySQL】explain的基本使用以及各列的作用
辅音和声母的区别?(声母与辅音的区别)
Mask wearing detection method based on yolov5
Manually implement function isinstanceof (child, parent)
An operation tool used by we media professionals who earn 1w+ a month
Basic operation of binary tree
Business visualization - make your flowchart'run'up
[noip2013] building block competition [noip2018] road laying greed / difference
Indicator trap: seven KPI mistakes that it leaders are prone to make
Several ways of writing main function in C
Difference and use between require and import
Clean up system cache and free memory under Linux
从MLPerf谈起:如何引领AI加速器的下一波浪潮
快乐数[环类问题之快慢指针]
LIS (longest ascending subsequence) problem that can be understood [easy to understand]
AirServer2022最新版功能介绍及下载
The difference between NiO and traditional IO
flink sql 命令行 连接 yarn