我正在开发一个Java应用程序,根据客户端设置的规则设置PRODUCT的各种属性。系统应该能够保存客户端定义的规则,并且应该根据规则中定义的条件设置属性。示例规则将如下:
------------RULE1
IF CLIENT_TYPE='INDIVIDUAL' and SALARY < 5000
FEECODE = 101
VALUECODE =102
ELSE
FEECODE = 103
VALUECODE= 100
------------RULE2
IF CLIENT_TYPE='COMPANY'
FEECODE = 105
VALUECODE =302
ELSE
FEECODE = 303
VALUECODE= 402
我将条件和运算符存储在CONDITION
表和参数(SALARY
,CLIENT_TYPE
,FEECODE
,VALUECODE
等等中)及其在PARAMETERS
表中的类别。 IF - ELSE
块之间的中间语句存储在单独的表CONDITION_STATEMENT
中。 (与第二个答案中定义的表结构类似(不完全):Storing Business Logic in Database)
现在我遇到一个问题,即在解雇规则时这些PARAMETERS
已填充在内存中(而不是在数据库中),并且每个PARAMETER
行为彼此不同。在上面的规则中说,SALARY将填充在一个变量中(在每个方案中并不总是在同一个变量中)和另一个变量中的CLIENT_TYPE。考虑到这一点,如何为所有这些场景编写通用规则引擎?或者我错过了一些东西吗?
表格结构如下:
PARAMETER Table
---------------
PARAM_ID
CATEGORY_ID
PARAMETER
PARAMETER_DESC
CONDITION Table
---------------
RULE_ID
RELATION_OPERATOR
PARAMETER
CONDITIONAL_OPERATOR
VALUE
CONDITION_STATEMENT Table
---------------------
id
RULE_ID
STATEMENT
VALUE