# RuleNg **Repository Path**: rainynyuan/RuleNg ## Basic Information - **Project Name**: RuleNg - **Description**: an easy rule engine framwork in Java 一套简单的Java规则引擎框架 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-23 - **Last Updated**: 2022-03-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RuleNg an easy rule engine framwork in Java 一套简单的Java规则引擎框架 本引擎框架是一个非常优秀的DSL设计方案,能抽象核心业务逻辑,方案兼具可读性,维护性,扩展性,解决方案堪称经典。 框架主要依赖三个类:Condition,Action,DTree,分别用于实现条件判断、触发动作和流程控制。基于该框架,实现复杂逻辑流程图实现大致分为三个步骤: 编写 Conditon 对象,以实现条件的判断。 编写 Action 对象,以实现满足不同的条件情形下触发的相应动作。 将 Condition 对象和 Action 对象进行组合,从而得到一个 DTree 对象,该对象的 run 方法即可以实现逻辑流程。 总结下来,在实现较为复杂的流程时,采用 dtree 可以将复杂的逻辑分成一个个小块,最后自由组合,这样既方便管理和维护,同时也方便扩展,即便是非常复杂的逻辑,也可以在细分成更小、更简单的逻辑块后,分别实现这些“小逻辑”,最后将其组合起来。 假如要根据学生的年龄(age)、兴趣(interest)、性别(gender)的不同为学生提供不同的礼物。 假定要实现的逻辑示意图为: ``` +++root: | +++年龄<12: | | +++喜欢 运动: | | | ---女生 --> 送 笔记本 | | | ---男生 --> 送 足球 | | ---Else --> 送 书 | +++年龄>=15: | | ---喜欢 写作 --> 送 笔记本 | | ---Else --> 送 书 | +++Else: | | ---男生 --> 送 足球 | | ---女生 --> 送 书 ```