面向对象的编程(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 类型的所有规则将在断言后重新评估。 此示例中的继承类型是实现。 即使仅断言派生类,如果规则使用基类的方法而不是派生类的方法编写,基类也会得到断言。