低代码规则开发:JQuick-Java声明式配置驱动开发落地教程
前言
低代码的核心不是「拖拽表单」,而是把业务语义从代码中抽离为可维护的配置。对规则密集型系统(信用评级、计费、风控)而言,指标、权重、阈值经常由业务人员直接调整------传统做法是开发改代码,低代码做法是业务改配置。JQuick-Java 的声明式配置驱动开发正是后者:规则以 XML/内联脚本声明,指标与权重由 Excel/XML 维护,业务代码零侵入。本文给出完整落地教程。
核心技术原理
JQuick-Java 的声明式开发范式由三层组成:
- 契约层(接口) :Java 接口定义规则方法签名,方法参数用
@Param注解命名,与脚本参数一一对应。 - 规则层(XML/内联) :
<javas namespace="接口全限定名">下每个<java name="方法名" returnClass="返回类型">承载 CDATA 内的类 Java 函数定义。 - 配置层(Excel):指标体系、权重、阈值由 Excel 维护(仓库内置《企业信用评级体系表_带权重.xlsx》),业务人员改 Excel,映射到 XML 规则即完成规则变更。
实战代码演示
1. 定义规则接口(契约层)
java
public interface ScoringMapper {
int scoreCapital(@Param("actualCapital") double actualCapital,
@Param("registeredCapital") double registeredCapital);
int scoreDebtRatio(@Param("debtRatio") double debtRatio); // 资产负债率
double calculateTotalScore(@Param("basicScore") int basicScore,
@Param("financialScore") int financialScore,
@Param("performanceScore") int performanceScore,
@Param("managementScore") int managementScore,
@Param("complianceScore") int complianceScore);
}
2. 声明 XML 规则(规则层)
xml
<javas namespace="com.github.paohaijiao.service.ScoringMapper">
<java name="scoreCapital" returnClass="int">
<![CDATA[
int def scoreCapital(double:actualCapital, double:registeredCapital) {
if (registeredCapital == 0){
return 0;
}
double ratio = actualCapital / registeredCapital;
if (ratio >= 1.0) {
return 8;
} else if (ratio >= 0.5) {
return 5;
} else if (ratio >= 0.2) {
return 3;
} else {
return 0;
}
}
]]>
</java>
</javas>
3. 一行代码接入业务(使用层)
java
ScoringMapper mapper = JQuickJava.create()
.importPackage("java.lang.String", "str")
.importPackage("java.util.Date", "JDate")
.createApi(ScoringMapper.class, "scoring-rules.xml");
int basicScore = mapper.scoreCapital(500, 500) + mapper.scoreCertification("甲级/一级/高新");
核心技术细节解析
- 命名对齐即契约 :接口方法名 = XML
<java name>,接口参数名 = 脚本类型:参数名,ParamUtil.bindParams通过@Param完成绑定,三者错位会得到空值或解析错误。 - 返回值按接口类型转换 :脚本返回
double,接口声明double,执行结果经JQuickValueTransformer与JQuickJavaTypeReference.of(method.getReturnType())做类型对齐,无需手工强转。 - 声明式与命令式共存 :XML CDATA 内既可是纯规则表达式,也可包含
console.log、循环、函数调用,复杂逻辑依然可用命令式脚本表达,灵活度不降级。
常见踩坑与解决方案
- 接口参数名与脚本不一致 :必须用
@Param("名称")显式声明,否则绑定到 null。务必保证三处命名一致。 - namespace 与接口全限定名不匹配 :
JQuickJavaXmlParseFactory按apiInterface.getName()查找 namespace,拼错全限定名会直接找不到规则。 - 把 Excel 当运行时依赖:Excel 是配置设计期产物,运行时规则载体是 XML;上线前请将 Excel 映射导出为 XML 规则文件。
最佳实践
- 接口按业务域拆分(资质域、财务域、履约域),每个域一个 XML namespace,便于多人并行维护。
- 阈值、权重集中在配置层管理,函数体保持「输入→判断→输出」的纯函数形态,方便单元化验证。
- 规则文件纳入版本管理,配合注释说明指标口径,实现规则资产化。
总结
JQuick-Java 的声明式配置驱动开发,让「业务人员维护指标权重、开发人员维护契约与执行」的分工成为可能,是低代码规则开发在 Java 生态中的轻量落地范式。对评分、校验、流程编排类业务,这套「接口 + XML + Excel」三层结构兼具灵活性与可维护性。