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

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

另请参阅

规则引擎