zoukankan      html  css  js  c++  java
  • 规则校验功能设计思路

    一、需求描述

    1. 每个表单参与校验的字段几十个,整个系统参与校验的字段数以百计,此时采用传统的前后端校验方式会使前端逻辑复杂度陡然增加,后端接口亦然,灵活性也不高。
    2. 系统需要对数据录入质量做记录,方便统计和考核。
    3. 规则可能随政策变化,必须支持以配置的方式来管理和维护,可能还需要导入,纯配置文件的方式对用户不友好,所以规则必须采用数据库持久化。
    4. RuleEngine(Drools、mvel2)、RDBMS(MySQL)、DistributedCache(Redis)。

    二、概要设计

    1. 构建功能模块树(可以限定为二至三级),方便按功能模块管理、加载规则、校验结果记录。
    • 法一、可以放在一张表中,增加type和parent_id字段,标记式模块还是功能点。
    id
    key
    type
    parent_id
    
    • 法二、可以将模块key放到公共字典表中,本表只存功能点key。
    id
    module_key
    function_key
    
    1. 所有规则项都应依据模块key来组织,方便细化缓存粒度,方便创建索引以加快规则查询速度。
    id
    module_key
    input_key
    rule_value
    
    1. 规则匹配过程
    • 前端
      • 可以通过约定好的模块key查询模块树,加载对应的规则列表。
      • 在输入处利用约定的rule_key从规则列表读取一条规则。
      • 发起异步校验请求,携带参数为:rule_value、input_value、module_key。
    • 后端
      • 执行校验
      • 将结果异步入库
      • 返回结果给

    三、疑点:

    1. 校验结果记录的粒度?若记录到订单,新增时订单id在何时生成,此时若没有订单id怎么办。若记录到模块或个人,如何细分。
    2. 针对同一条业务属性的校验结果,面对编辑操作,是记录流水还是覆盖存储?
    3. 前后端对module_key、rule_key的获取,采用约定式还是加载式?大概率要采用约定式,即采用硬编码的方式。
    4. 是否需要做成微服务?至少独立成功能模块。
    5. 以整个表单为单位集中校验还是逐个字段校验?

    四、附录

    mvel语法实例:https://www.cnblogs.com/cg14/p/11870882.html
    https://blog.csdn.net/SunnyYoona/article/details/75244442

    学习使我充实,分享给我快乐!
  • 相关阅读:
    HDU 1754 I Hate It (线段树)
    HDU 1394 Minimum Inversion Number (树状数组)
    天梯赛 L2-012 关于堆的判断 (二叉树)
    HDU 1166 敌兵布阵 (树状数组 单点修改+区间查询)
    [leetcode-77-Combinations]
    [leetcode-101-Symmetric Tree]
    [leetcode-21-Merge Two Sorted Lists]
    [leetcode-109-Convert Sorted List to Binary Search Tree]
    [leetcode-507-Perfect Number]
    [leetcode-537-Complex Number Multiplication]
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/13568654.html
Copyright © 2011-2022 走看看