来自: http://www.blogcn.com/User8/flier_lu/blog/3033489.html
对软件设计来说,如何在将用户业务相关问题域映射到与实现技术相关的面向对象体系架构,而又同时保证映射的准确性和灵活性,是构建大型系统的关键性因素之一。个人认为通过构建基于工作流和规则驱动的软件体系架构是最终解决之道。工作流负责宏观的任务流程定制和重组;规则驱动则负责微观的任务逻辑与实现分离。
Java 在这方面先行一步,由 JCP (Java Community Process) 定义的 JSR 94: Java Rule Engine API 描述了如何提供规则引擎 API,实现客户程序与规则引擎的交互。此接口集包括了规则的载入、执行以及管理等等功能,由 BEA、IBM 等厂商推动支持,同时也有大量的开源实现。
过于规则引擎的目标和优势,可以参考下面这篇文章的介绍
Business rules management systems
在 Java 规则引擎领域,做得最好的三家商业公司分别是:
1.PST 的 OPSJ
2.Sandia 国家实验室的 Jess
3.ILOG 的 JRules
在开源阵营,则有众多的选择
Open Source Rule Engines Written In Java
其中比较著名的 Drools 可以参考 TSS 上的一篇介绍文章
Introduction Drools
javarules.org 网站上有相对较为全面的资源介绍。
而这些产品的算法,基本上都是来源于 Dr. Charles Forgy 在 1979 年提出的 RETE 算法。其核心思想是将分离的匹配项根据内容动态构造匹配树,以达到显著降低计算量的效果。下面几篇文章简要介绍了此算法:
CIS587: The RETE Algorithm
The Rete Algorithm
RETE演算法
《专家系统原理与编程》中第11章