把可变的业务规则从从具体实现代码中独立抽象出来,形成独立的规则,加上对这些规则的管理的执行的通用程序,称之为规则引擎。目前规则引擎有较多的开源实现,如:JBOSS Rules,OpenRules等,这些引擎都是通过对规则的管理和执行来处理业务逻辑的,通常提供了规则的开发环境、规则开发语言和规则库的管理等功能。但使用这些传统的规则引擎时,对于不同的业务需求,需要编写不同的规则来处理,整个系统看来是非常灵活的,但规则本身去具有不可变性,也就是说当一条规则写好后,只能使用或不使用这条规则,当业务上稍有变动时,则需要重新写一条规则来处理,这样写的规则就缺乏灵活性,给规则的开发和维护带来较大困难,也不能灵活地解决业务需求的变化,同时对于规则开发来说还要学习规则开发语言。
扩展规则引擎借鉴了传统规则引擎的思想,同时也进行了一些改变,提供了一种新的规则开发和管理机制,使用起来比传统规则引擎更加方便和灵活,更能适应业务的变化,更利于扩展和维护,同时兼容于原有规则引擎。扩展规则引擎对原有规则对象本身的模型进行了扩展,通过对规则进行分类和抽象,提出了基于规则模板的新的扩充的规则模型,使规则本身具有适应性和可变性,使规则更能适应需求的变化,同时也减少了开发规则的工作量。下面对扩展规则引擎的各部分进行详细介绍。
扩展规则引擎中最重要的就是规则模板,所有规则都是基于规则模板的,规则和规则模板的关系就相当于类和对象的关系,通过对规则模板进行设置,可以生成一条或多条规则则实例。规则模板由规则处理器、规则参数、规则结果处理模式定义三部分组成:
规则处理器包含了实现规则处理逻辑,就有点像传统的规则描述,但是规则处理器的开发是用通用的程序开发语言(Java,C#等)开发的,通过一个缺省的自定义处理器,可以兼容原有的规则定义。同时规则处理器也支持不同的开发语言和不同的执行上下文。
规则参数是对规则处理器支持的可变参数进行定义,参数本身是自描述的,即对于参数如何处理参数自已知道,这个是通过类型扩展体系来实现的,在规则实例化时,不同的参数值生成不同的规则,可应用于不同的场合,其实很多时候业务需求的改变只需要改变规则参数的值就可以实现,自动产生新的规则实例,而不用像传统规则引擎需要重新写一条规则。
规则结果处理模式定义是定义当规则处理验证成功或失败的处理方式,这个在传统一规则引擎中是没法定义的,一般是写在了每条规则中,缺乏灵活性,不利于扩展。有了规则处理结果自定义,当失败或成功时如何处理就变得可灵活可自定义了。
扩展规则引擎同时也提供规则管理和开发的工具,使得规则的开发和使用都变得简单。同时也提供了通用的规则服务,供各规则使用者以一致的方式进行调用。