支持业务规则引擎中的类继承

面向对象的编程(OOP)语言的主要功能之一是继承。 继承是能够使用现有类的所有功能,并且无需重写原始类即可扩展这些功能。

业务规则框架支持两种类型的类继承:实现和接口。 实现继承是指能够使用基类的属性和方法,而无需进行额外的编码。 接口继承指的是子类可以继承父类的属性和方法的名称,但必须提供具体实现。

规则可以以通用基类的形式编写,但输入到引擎中的对象可以来自派生类。 在以下示例中, RegularEmployeeContractEmployee 是基类 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 类型的所有规则将在断言后重新评估。 此示例中的继承类型是实现。 即使仅断言派生类,如果规则使用基类的方法而不是派生类的方法编写,基类也会得到断言。

另请参阅

规则引擎