基于规则和规则引擎的系统
具体示例见: 《Java Drools5.1 规则流基础【示例】》
做了一段时间的关于基于规则和规则引擎的应用开发工作, 现在将一些心得体会写出来供大家参考。
1. 逻辑表达与执行的分离。这是根本性的东西。业务逻辑的实现可以细分为业务逻辑的表达和执行。 在传统代码中,表达与执行是混在一起的,均是由代码来表达和执行;而在基于规则和规则引擎的系统中,规则用于逻辑表达,引擎进行执行。逻辑表达与执行分离了。
2. 基于规则的系统中, 系统的正确性取决于规则的正确性。规则就像一系列表达“KNOW-HOW”的小片, 通过将规则片合理的组合起来(规则流的作用),从而表达完整的计算逻辑。规则、规则流和规则引擎是核心概念。
3. 动态可配置的计算逻辑,具备固有的可扩展性。由于计算逻辑通过规则来表达和实现,而规则是动态可配置的,这就使得计算逻辑是动态可配置的。这对于复杂多变、要求快速部署的现代商业应用是非常具有潜力和优势的。而传统代码通常是静态的逻辑,通过设计模式技术来获得一定的可扩展性,对人的设计思维有很大的要求。
4. 规则比代码更具可读性。 如果将规则生成和管理系统做到更人性化,就可以让用户通过编写规则和规则流来创建应用逻辑了。
5. 规则具备自解释性。可以跟踪规则的执行, 清晰地看到最终计算结果的产生过程。而在传统代码中,虽然能够打印出一些语句,但是受程序结构限制, 通常仅限于程序员来调试。
6. 计算组件的复用性。 如前所述, 规则用于表达, 引擎用于执行。 业务逻辑的多变性通常体现在表达上,而不是执行上。 因此, 表达部分是多变的,而执行部分是相对稳定的。规则引擎是计算组件中的可复用部分。
7. 策略与机制的分离。在软件设计的角度来说,这也体现了策略与机制的分离。 规则表达是策略, 引擎是机制。 策略可变,机制稳定。
总而言之, 基于规则和规则引擎的系统确实是一种非常具备潜力的新的计算方案。