如何在5分钟内上手RuleBook?从Hello World到实际业务规则的完整指南

发布时间:2026/7/10 15:52:03
如何在5分钟内上手RuleBook?从Hello World到实际业务规则的完整指南 如何在5分钟内上手RuleBook从Hello World到实际业务规则的完整指南【免费下载链接】rulebook100% Java, Lambda Enabled, Lightweight Rules Engine with a Simple and Intuitive DSL项目地址: https://gitcode.com/gh_mirrors/ru/rulebook你是否厌倦了代码中充斥着复杂的if/else语句是否需要一个优雅的规则引擎来简化业务逻辑RuleBook正是你寻找的解决方案作为一款100%纯Java开发的轻量级规则引擎它提供了简单直观的DSL领域特定语言支持Lambda表达式让规则定义变得前所未有的简单。本指南将带你从Hello World开始快速掌握RuleBook的核心用法并应用到实际业务场景中。 RuleBook规则引擎为什么选择它RuleBook的设计理念完全符合Java开发者的思维方式用Java代码编写规则按期望的顺序执行。它提供了两种规则定义方式Lambda DSL- 使用流畅的API和Lambda表达式POJO注解- 使用简单的Java对象和注解无论你是新手还是有经验的开发者都能在5分钟内掌握RuleBook的基本用法。让我们从最简单的Hello World开始吧 快速开始安装RuleBook在你的项目中添加RuleBook非常简单。如果你使用Mavendependency groupIdcom.deliveredtechnologies/groupId artifactIdrulebook-core/artifactId version0.12/version /dependency如果你使用Gradlecompile com.deliveredtechnologies:rulebook-core:0.12或者直接从源码构建git clone https://gitcode.com/gh_mirrors/ru/rulebook cd rulebook ./gradlew build 第一步Hello World示例让我们从一个最简单的例子开始。在RuleBook中创建一个规则就像写一段自然的Java代码RuleBook ruleBook RuleBookBuilder.create() .addRule(rule - rule.withNoSpecifiedFactType() .then(f - System.out.print(Hello )) .then(f - System.out.println(World))) .build(); ruleBook.run(new FactMap());这段代码会输出Hello World。是不是很简单RuleBook使用流畅的API让你可以像写句子一样定义规则。 使用Facts事实的Hello World在实际应用中我们通常需要处理数据。RuleBook使用Facts事实来传递数据RuleBook ruleBook RuleBookBuilder.create() .addRule(rule - rule.withFactType(String.class) .when(f - f.containsKey(hello)) .using(hello) .then(System.out::print)) .addRule(rule - rule.withFactType(String.class) .when(f - f.containsKey(world)) .using(world) .then(System.out::println)) .build(); NameValueReferableMap factMap new FactMap(); factMap.setValue(hello, Hello ); factMap.setValue(world, World); ruleBook.run(factMap); 实际业务场景贷款审批系统让我们看一个真实的业务场景。假设我们为一家银行开发贷款审批系统需要根据申请人的信用评分、现金储备和首次购房者状态来计算贷款利率。定义数据模型首先我们创建一个申请人数据模型public class ApplicantBean { private int creditScore; // 信用评分 private double cashOnHand; // 现金储备 private boolean firstTimeHomeBuyer; // 是否首次购房 // 构造函数、getter和setter }创建贷款规则手册现在让我们用RuleBook定义贷款审批规则public class HomeLoanRateRuleBook extends CoRRuleBookDouble { Override public void defineRules() { // 信用评分低于600利率增加4倍 addRule(RuleBuilder.create().withFactType(ApplicantBean.class).withResultType(Double.class) .when(facts - facts.getOne().getCreditScore() 600) .then((facts, result) - result.setValue(result.getValue() * 4)) .stop() .build()); // 信用评分600-700利率增加1个点 addRule(RuleBuilder.create().withFactType(ApplicantBean.class).withResultType(Double.class) .when(facts - facts.getOne().getCreditScore() 700) .then((facts, result) - result.setValue(result.getValue() 1)) .build()); // 信用评分≥700且现金≥$25,000利率减少0.25点 addRule(RuleBuilder.create().withFactType(ApplicantBean.class).withResultType(Double.class) .when(facts - facts.getOne().getCreditScore() 700 facts.getOne().getCashOnHand() 25000) .then((facts, result) - result.setValue(result.getValue() - 0.25)) .build()); // 首次购房者享受20%折扣信用评分≥600 addRule(RuleBuilder.create().withFactType(ApplicantBean.class).withResultType(Double.class) .when(facts - facts.getOne().isFirstTimeHomeBuyer()) .then((facts, result) - result.setValue(result.getValue() * 0.80)) .build()); } }使用规则手册public class ExampleSolution { public static void main(String[] args) { RuleBook homeLoanRateRuleBook RuleBookBuilder.create(HomeLoanRateRuleBook.class) .withResultType(Double.class) .withDefaultResult(4.5) // 基础利率4.5% .build(); NameValueReferableMap facts new FactMap(); facts.setValue(applicant, new ApplicantBean(650, 20000.0, true)); homeLoanRateRuleBook.run(facts); homeLoanRateRuleBook.getResult().ifPresent(result - System.out.println(申请人获得利率: result)); } }️ RuleBook的核心概念1. Given-When-Then模式RuleBook采用BDD行为驱动开发中的Given-When-Then模式Given- 提供事实FactsWhen- 条件判断返回true/falseThen- 执行动作2. 规则链行为RuleBook支持三种规则链行为行为类型描述CONTINUE_ON_FAILURE默认行为规则失败时继续执行ERROR_ON_FAILURE规则失败时抛出异常并停止STOP_ON_FAILURE规则失败时停止执行链3. 审计功能RuleBook提供内置的规则审计功能RuleBook rulebook RuleBookBuilder.create().asAuditor() .addRule(rule - rule.withName(规则1).withNoSpecifiedFactType() .when(f - true) .then(f - { })) .addRule(rule - rule.withName(规则2).withNoSpecifiedFactType() .when(f - false) .then(f - { })) .build(); rulebook.run(new FactMap()); Auditor auditor (Auditor)rulebook; System.out.println(auditor.getRuleStatus(规则1)); // 输出: EXECUTED System.out.println(auditor.getRuleStatus(规则2)); // 输出: SKIPPED POJO规则更简洁的方式如果你更喜欢使用注解RuleBook支持POJO规则Rule(order 1) public class LowCreditScoreRule { Given private ListApplicantBean applicants; Result private double rate; When public boolean when() { return applicants.stream() .allMatch(applicant - applicant.getCreditScore() 600); } Then public RuleState then() { rate * 4; return RuleState.BREAK; } }使用POJO规则更加简洁RuleBookRunner ruleBook new RuleBookRunner(com.example.rulebook.megabank); ruleBook.setDefaultResult(4.5); ruleBook.run(facts); ruleBook.getResult().ifPresent(System.out::println); Spring集成RuleBook与Spring框架完美集成添加Spring支持依赖使用RuleBean注解标记规则类在规则中注入Spring组件RuleBean Rule(order 1) public class HelloSpringRule { Autowired HelloWorldComponent helloWorldComponent; Given(hello) private String hello; Result private String result; When public boolean when() { return hello ! null; } Then public void then() { result helloWorldComponent.getHelloWorld(result, world); } } RuleBook的优势总结简单直观- 使用Java开发者熟悉的语法类型安全- 编译时类型检查线程安全- RuleBook实例可在多线程环境中安全使用轻量级- 无复杂依赖易于集成灵活- 支持Lambda DSL和POJO注解两种方式可扩展- 易于与Spring等框架集成 下一步行动建议从简单开始- 先用Lambda DSL创建几个简单规则尝试POJO规则- 体验注解方式的简洁性集成到现有项目- 将复杂的if/else逻辑迁移到RuleBook探索高级特性- 尝试规则审计、Spring集成等功能RuleBook的官方文档位于docs/official.md其中包含更多详细信息和高级用法。AI功能源码位于plugins/ai/目录中。 最佳实践保持规则单一职责- 每个规则只做一件事合理命名规则- 便于理解和维护使用FactMap传递数据- 避免直接修改原始对象利用规则链顺序- 合理安排规则执行顺序启用审计功能- 便于调试和监控现在你已经掌握了RuleBook的核心概念从简单的Hello World到复杂的业务规则RuleBook都能优雅地处理。开始重构你的if/else逻辑让代码更加清晰、可维护吧记住好的规则引擎应该让复杂的事情变简单而不是让简单的事情变复杂。RuleBook正是这样的工具✨【免费下载链接】rulebook100% Java, Lambda Enabled, Lightweight Rules Engine with a Simple and Intuitive DSL项目地址: https://gitcode.com/gh_mirrors/ru/rulebook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

揭阳手机网站建设避坑指南:别被低价忽悠,做好这几点才不亏

揭阳手机网站建设避坑指南:别被低价忽悠,做好这几点才不亏

本文关键词:揭阳手机网站建设说实话,看到“揭阳手机网站建设”这几个字,我脑子里第一反应不是那些高大上的代码,而是前年帮朋友老张踩过的一个大坑。那时候他刚开了家做五金配件的小厂,觉得有个网站就能接大单,随便找了个淘宝上几十块钱的模板站。结果呢?客户在手机上一…

发布时间:2026/7/10 15:51:24
青海省高速公路建设管理局网站怎么查最新路况?老司机亲测避坑指南

青海省高速公路建设管理局网站怎么查最新路况?老司机亲测避坑指南

去年冬天,我开着车从西宁往格尔木方向跑,原本以为就是条平平无奇的长途路,结果在德令哈附近差点被大雪坑惨了。那时候手机导航虽然能显示大概位置,但遇到突发封路或者临时管制,信息滞后得让人抓狂。最后我是靠着一个老同事推荐的渠道,才查到了确切的路况,不然真可能在雪…

发布时间:2026/7/10 15:51:18
别被忽悠了!揭秘扬州网站建设企业那些不敢说的潜规则

别被忽悠了!揭秘扬州网站建设企业那些不敢说的潜规则

做网站这事儿,真没你想的那么简单。很多人觉得,找个模板套一下,几天就能搞定。结果呢?打开速度慢得像蜗牛,手机上看还乱码。更惨的是,百度根本搜不到你。这时候你才慌了神。其实,选对一家靠谱的扬州网站建设企业,比你自己瞎折腾强百倍。今天咱就掏心窝子聊聊,这行里的…

发布时间:2026/7/10 15:50:58
建设网站的流程可分为哪几个阶段,别再被忽悠了

建设网站的流程可分为哪几个阶段,别再被忽悠了

做网站不是搭积木,想怎么拼就怎么拼。很多老板一上来就问多少钱,其实这问题太肤浅。真正的坑都在看不见的地方。这篇文帮你理清头绪,避开那些隐形的大雷。先别急着找外包公司。你得先想清楚,网站是干嘛的?是卖货?还是展示品牌?或者是做个社区?目的不同,打法完全不一样…

发布时间:2026/7/10 16:46:38
教学网站建设论文怎么写才不假?老教师掏心窝子的几点建议

教学网站建设论文怎么写才不假?老教师掏心窝子的几点建议

说实话,刚接到这个任务的时候,我也头大。不是技术难,是心累。你要写论文,还要建网站,两边都要顾。我带过不少学生,也自己折腾过好几个教育类的项目。今天不跟你扯那些虚头巴脑的理论。就聊聊怎么把这件事儿办漂亮,而且写得像个人话。先说心态。别一上来就想着怎么凑字数…

发布时间:2026/7/10 16:46:05
Msnhnet模型转换全攻略:Pytorch/Keras模型一键迁移实战

Msnhnet模型转换全攻略:Pytorch/Keras模型一键迁移实战

Msnhnet模型转换全攻略:Pytorch/Keras模型一键迁移实战 【免费下载链接】Msnhnet 🔥 (yolov3 yolov4 yolov5 unet ...)A mini pytorch inference framework which inspired from darknet. 项目地址: https://gitcode.com/gh_mirrors/ms/Msnhnet M…

发布时间:2026/7/10 16:45:18
深圳网站建设代理怎么选才不踩坑?揭秘那些没人告诉你的隐形成本

深圳网站建设代理怎么选才不踩坑?揭秘那些没人告诉你的隐形成本

本文关键词:深圳网站建设代理找深圳网站建设代理,真的挺让人头大的。市面上报价从几千到几万都有。很多老板一开始只看价格。觉得便宜就是硬道理。结果呢?后期全是坑。今天咱们不聊虚的。就聊聊怎么挑个靠谱的团队。首先,别迷信“模板建站”。虽然快,但千篇一律。你的品牌…

发布时间:2026/7/10 16:43:08
金华网站建设明细报价表到底怎么算?老板们别被坑了,看完这篇再掏钱

金华网站建设明细报价表到底怎么算?老板们别被坑了,看完这篇再掏钱

本文关键词:金华网站建设明细报价表最近好多金华本地的老板私信我,问起金华网站建设明细报价表的事情。说实话,这行水太深了,报价从几千到几万都有,如果不搞清楚里面的门道,很容易花冤枉钱。我在这行摸爬滚打也有七八年了,见过太多因为贪便宜最后网站打不开,或者因为太…

发布时间:2026/7/10 16:42:52
Sadcloud配置指南:如何启用特定AWS服务的漏洞场景进行渗透测试

Sadcloud配置指南:如何启用特定AWS服务的漏洞场景进行渗透测试

Sadcloud配置指南:如何启用特定AWS服务的漏洞场景进行渗透测试 【免费下载链接】sadcloud A tool for standing up (and tearing down!) purposefully insecure cloud infrastructure 项目地址: https://gitcode.com/gh_mirrors/sa/sadcloud Sadcloud是一款专…

发布时间:2026/7/10 16:43:28
老板们别被忽悠了,企业网站建设费用摊销到底怎么算才不亏?

老板们别被忽悠了,企业网站建设费用摊销到底怎么算才不亏?

说实话,每次听到老板们拍着桌子问“做个网站要多少钱”,我心里就直犯嘀咕。你们关心的根本不是网站好不好用,而是这钱花得值不值,能不能立马变出利润来。我见过太多公司,花个三五万做个花里胡哨的首页,结果后台乱成一锅粥,SEO标签全没填,上线半年连个蜘蛛都不爬。这种钱…

发布时间:2026/7/10 0:00:19
网站搜索建设怎么做?新手避坑指南与实战心得

网站搜索建设怎么做?新手避坑指南与实战心得

很多老板做网站,花大价钱搞设计,最后发现用户根本找不到内容,搜索功能形同虚设。这篇干货不讲虚的,直接告诉你怎么搭建一个真正好用的站内搜索,解决用户找不到东西、跳出率高的问题。上周我去了一家做高端家具的电商网站。页面确实漂亮,极简风,高级感拉满。但是,我想找…

发布时间:2026/7/10 0:00:33
北京市建设工程质量监督网站查询实操指南与避坑实录

北京市建设工程质量监督网站查询实操指南与避坑实录

做工程最怕什么?怕验收不过,怕资料补不齐,怕最后拿着钱还背一身债。这篇不整虚的,直接告诉你怎么通过北京市建设工程质量监督网站搞定验收流程,以及那些没人愿意告诉你的隐形坑。先说个真事儿。上个月有个做装修的朋友,急着拿竣工验收备案表,结果在北京市建设工程质量监…

发布时间:2026/7/10 0:00:37
做个人信息管理网站建设,这3个坑我踩了七年,你千万别再跳

做个人信息管理网站建设,这3个坑我踩了七年,你千万别再跳

做了七年建站,见过太多老板花大钱买模板,最后发现根本没法用。特别是现在大家都讲究数据隐私,想搞个个人信息管理网站建设,结果越搞越乱。这篇文不整虚的,直接说怎么把这套系统落地,让你自己的数据真正听话。先说个真事儿。去年有个做自由职业的朋友找我,他说想建个网站…

发布时间:2026/7/10 15:55:18
杨凌规划建设局网站怎么查最新规划?老杨说点大实话

杨凌规划建设局网站怎么查最新规划?老杨说点大实话

杨凌规划建设局网站你是不是也遇到过这种情况?想看看自家旁边要修路,还是建公园。翻遍了手机,搜出来的全是几年前的旧闻。或者好不容易找到个入口,页面加载慢得像蜗牛。心里那个急啊,真的,懂的人都懂。我是老杨,在杨凌混了十几年,跟这行打交道不少。今天不跟你扯那些虚…

发布时间:2026/7/9 15:43:42
杭州网站建设 seo 避坑指南:别被那些只会套模板的忽悠了

杭州网站建设 seo 避坑指南:别被那些只会套模板的忽悠了

昨天半夜两点,我还在改一个客户的后台,咖啡都凉透了。这哥们儿是做机械配件的,在余杭那边,找的前一家公司花了八千块做了个站,结果上线一个月,百度连个影子都没有。他急得给我打电话,说是不是被黑了。我让他把链接发过来,打开一看,好家伙,那代码乱得跟刚被猫抓过的毛…

发布时间:2026/7/9 16:54:10
建站7年才悟出的网站建设思路,别再花冤枉钱了

建站7年才悟出的网站建设思路,别再花冤枉钱了

做建站这行整整7年了。 见过太多老板花几万块, 最后做出来的网站像个垃圾场。 今天不整那些虚头巴脑的术语。 就聊聊我踩过的坑, 和真正能落地的网站建设思路。很多老板一上来就问: “多少钱能做个高大上的?” 我通常直接劝退。 因为方向错了, 你给再多钱也是打水漂。 真正…

发布时间:2026/7/9 15:45:02
合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

做企业官网最怕什么?不是技术难,是交钱后没人管,或者上线一个月连个访客都没有。这篇东西不扯虚的,直接告诉你怎么在合肥找个靠谱的团队,或者自己怎么避坑。先说个大实话,我在合肥混这行五年多,见过太多老板因为贪便宜吃大亏。你去百度搜“合肥的网站建设”,出来一堆报…

发布时间:2026/7/9 15:44:20
别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

做这行久了,心里就憋着一股火。每次看到客户拿着网上抄来的模板,问我能不能做成“苹果官网”那种效果。我就想笑。真的,太想笑了。今天咱不整那些虚头巴脑的专业术语。就聊聊德州网站建设里,那些让人头秃的真实事儿。我有个客户,老张。他是做德州本地建材的,实在人。当初…

发布时间:2026/7/9 15:45:20