You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

适用于多场景灵活业务规则的动作执行授权设计模式咨询

基于成熟设计模式的灵活规则校验系统实现方案

针对你描述的业务场景——Actor对实体执行Action前需校验一组随业务频繁变化的规则,推荐以下几种落地方案,均基于经典设计模式,无需从零搭建:

1. 核心基础:规则模式(Rule Pattern)+ 策略模式(Strategy Pattern)

这是最轻量化、易维护的组合方案,核心思路是把每个业务规则封装成独立的原子组件,再根据上下文动态选择并执行规则集合。

落地步骤:

  • 定义统一规则接口:所有规则实现相同的接口,保证校验逻辑的一致性:
public interface BusinessRule {
    // 校验方法,传入包含Actor、实体、动作类型等信息的上下文
    boolean validate(ActionExecutionContext context);
    // 返回规则校验失败的错误信息
    String getFailureMessage();
}
  • 实现独立规则类:每个规则只负责单一校验逻辑,比如:
public class UserPermissionRule implements BusinessRule {
    @Override
    public boolean validate(ActionExecutionContext context) {
        // 校验当前用户是否有执行该Action的权限
        return context.getActor().hasPermission(context.getActionType());
    }

    @Override
    public String getFailureMessage() {
        return "当前用户无权限执行该操作";
    }
}

public class EntityStatusRule implements BusinessRule {
    @Override
    public boolean validate(ActionExecutionContext context) {
        // 校验实体状态是否允许执行当前Action
        return context.getEntity().getStatus() == EntityStatus.ENABLED;
    }

    @Override
    public String getFailureMessage() {
        return "实体状态不允许执行该操作";
    }
}
  • 构建规则引擎执行器:负责加载指定规则集合,批量执行校验并汇总错误:
public class RuleValidator {
    private List<BusinessRule> activeRules;

    public RuleValidator(List<BusinessRule> activeRules) {
        this.activeRules = activeRules;
    }

    public void executeValidation(ActionExecutionContext context) throws RuleValidationException {
        List<String> failureMessages = new ArrayList<>();
        for (BusinessRule rule : activeRules) {
            if (!rule.validate(context)) {
                failureMessages.add(rule.getFailureMessage());
            }
        }
        if (!failureMessages.isEmpty()) {
            throw new RuleValidationException("规则校验失败", failureMessages);
        }
    }
}
  • 配置化规则集合:通过配置文件(如YAML、JSON)定义不同场景下的启用规则,启动时根据配置实例化对应规则类并注入到RuleValidator:
# 针对用户执行UPDATE_ENTITY动作的规则配置
action_type: UPDATE_ENTITY
actor_type: USER
active_rules:
  - "UserPermissionRule"
  - "EntityStatusRule"
  - "UserOperationQuotaRule"

2. 进阶优化:注解驱动+配置中心热更新

如果你的系统基于Spring等框架,可以结合注解进一步简化规则的注册和管理:

  • 定义@BusinessRuleConfig注解,标记规则类的适用场景(如动作类型、Actor类型)
  • 实现规则注册表,自动扫描所有带注解的规则类并缓存
  • 对接配置中心(如Nacos、Apollo),实时拉取最新的规则配置,动态重建RuleValidator实例,实现规则热更新无需重启服务

3. 复杂场景:成熟规则引擎(如Drools)

如果业务规则极其复杂(包含大量分支、条件组合),且变化频率极高,可以直接采用成熟的规则引擎。这类引擎支持用DSL(领域特定语言)编写规则,无需修改代码即可更新规则,同时提供规则优先级、冲突解决等高级特性。但注意:规则引擎有一定学习成本,若业务规则复杂度不高,前两种方案足够满足需求。

关键注意事项

  • 上下文设计要可扩展:ActionExecutionContext需包含所有规则可能用到的信息(Actor属性、实体数据、动作元信息、时间、环境变量等),避免后续因新增规则频繁修改上下文类
  • 规则保持原子性:每个规则只负责单一校验逻辑,不要混合多个校验场景,方便独立修改和测试
  • 错误信息标准化:规则返回的错误信息需清晰明确,便于前端展示和问题排查

内容的提问来源于stack exchange,提问作者Ignacio Negro Caino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:45:34