Freigeben über


Unterstützung für Klassenvererbung in der Geschäftsregel-Engine

Eines der wichtigsten Merkmale der OOP-Sprache (Object Oriented Programming, objektorientierte Programmierung) ist Vererbung. Unter Vererbung versteht man die Fähigkeit, alle Funktionen einer vorhandenen Klasse zu nutzen und diese Funktionen zu erweitern, ohne dass die Originalklasse geändert werden muss.

Das Business Rules Framework unterstützt zwei Arten von Klassenvererbung: Implementierung und Schnittstelle. Die Implementierungsvererbung bezieht sich auf die Fähigkeit, die Eigenschaften und Methoden einer Basisklasse ohne weitere Codierung zu verwenden. Schnittstellenvererbung bezieht sich auf die Fähigkeit, nur die Namen der Eigenschaften und Methoden zu verwenden, wobei die untergeordnete Klasse für die Implementierung zuständig ist.

Die Regeln können in Begriffen einer gemeinsamen Basisklasse geschrieben werden, die an die Engine übergebenen Objekte können jedoch aus abgeleiteten Klassen stammen. Im folgenden Beispiel sind RegularEmployee und ContractEmployee abgeleitete Klassen der Basisklasse Employee.

class Employee  
   {  
      public string Status()  
      {   
         // member definition  
      }  
      public string TimeInMonths()        
      {   
         // member definition  
      }  
   }  
  
class ContractEmployee : Employee  
{  
   // class definition  
}  
class RegularEmployee : Employee  
{  
   // class definition  
}  

Angenommen, Sie haben die folgenden Regel formuliert:

Regel 1

IF Employee.TimeInMonths < 12  
THEN Employee.Status = "New"  

Wenn der Benutzer zur Laufzeit zwei Objekte geltend macht, eines ein instance von ContractEmployee und das andere ein instance von RegularEmployee, werden beide Objektinstanzen anhand der zuvor beschriebenen Regel ausgewertet.

Der Benutzer kann abgeleitete Klassenobjekte auch mithilfe von Assert in Aktionen behaupten. Dies hat zur Folge, dass die Regeln, die das abgeleitete Objekt und den Basistyp in den Bedingungen enthalten, neu ausgewertet werden (siehe das folgende Beispiel).

Regel 2

IF Employee.Status = "Contract"   
THEN Employee.Bonus = false  
Assert(new ContractEmployee())  

Alle Regeln, die den Employee-Typ oder den ContractEmploye-Typ in ihren Bedingungen enthalten, werden nach der Assertion erneut ausgewertet. Der in diesem Beispiel wirksame Vererbungstyp ist die Implementierungsvererbung. Obwohl lediglich die abgeleitete Klasse übergeben wird, erfolgt auch eine Übergabe der Basisklasse, wenn zum Schreiben der Regeln die Methoden in der Basisklasse anstelle der abgeleiteten Klasse verwendet werden.

Weitere Informationen

Regel-Engine