业务规则引擎中对类继承的支持
面向对象编程 (OOP) 语言的主要功能之一是继承。 通过继承,可以使用现有类的所有功能,并且无需重新编写原始类就可以对这些功能进行扩展。
业务规则框架支持两种类型的类继承:实现和接口。 实现继承是指使用基类的属性和方法而不进行额外编码的能力。 接口继承是指只使用属性和方法的名称,但子类必须提供实现的能力。
规则可以按照常见基类进行编写,但添加到引擎中的对象可以来自派生类。 在以下示例中, RegularEmployee 和 ContractEmployee 是基类 Employee 的派生类。
class Employee
{
public string Status()
{
// member definition
}
public string TimeInMonths()
{
// member definition
}
}
class ContractEmployee : Employee
{
// class definition
}
class RegularEmployee : Employee
{
// class definition
}
假设你有以下规则。
规则 1
IF Employee.TimeInMonths < 12
THEN Employee.Status = "New"
在运行时,如果用户断言两个对象,一个是 ContractEmployee 的实例,另一个是 RegularEmployee 的实例,则两个对象实例都会根据前面所述的规则进行评估。
用户还可以通过使用 Assert 在操作中断 言派生的类对象。 这将导致在其条件中包含派生对象及其基本类型的规则重新计算,如下例所示。
规则 2
IF Employee.Status = "Contract"
THEN Employee.Bonus = false
Assert(new ContractEmployee())
在其条件中包含 Employee 类型或 ContractEmployee 类型的所有规则将在断言后重新评估。 在此示例中,继承的类型是实现。 即使只添加派生类,但如果使用基类而不是派生类中的方法来编写规则,那么也会添加基类。