Supporto dell'ereditarietà delle classi nel Motore regole di business
Una delle funzionalità principali dei linguaggi di programmazione orientata a oggetti (OOP, Object Oriented Programming) è rappresentata dall'ereditarietà. Per ereditarietà si intende la capacità di utilizzare tutte le funzionalità di una classe esistente e di estendere tali capacità senza riscrivere la classe originale.
Business Rules Framework supporta due tipi di ereditarietà della classe: implementazione e interfaccia. Per ereditarietà dell'implementazione si intende la capacità di utilizzare le proprietà e i metodi di una classe di base senza che sia necessaria la scrittura di codice aggiuntivo. Per ereditarietà di interfaccia si intende la capacità di utilizzare semplicemente i nomi delle proprietà e dei metodi, ma l'implementazione deve essere fornita dalla classe figlio.
Le regole possono essere scritte in termini di classe di base comune, ma gli oggetti dichiarati nel motore possono provenire dalle classi derivate. Nell'esempio seguente, RegularEmployee e ContractEmployee sono classi derivate della classe base Employee.
class Employee
{
public string Status()
{
// member definition
}
public string TimeInMonths()
{
// member definition
}
}
class ContractEmployee : Employee
{
// class definition
}
class RegularEmployee : Employee
{
// class definition
}
Si supponga di utilizzare la regola seguente:
Regola 1
IF Employee.TimeInMonths < 12
THEN Employee.Status = "New"
In fase di esecuzione, se l'utente afferma due oggetti, un'istanza di ContractEmployee e l'altra un'istanza di RegularEmployee, entrambe le istanze dell'oggetto vengono valutate rispetto alla regola descritta in precedenza.
L'utente può anche asserire oggetti di classe derivati nelle azioni usando un'asserzione. In questo modo le regole le cui condizioni contengono l'oggetto derivato e il relativo tipo base verranno rivalutate, come illustrato nell'esempio seguente.
Regola 2
IF Employee.Status = "Contract"
THEN Employee.Bonus = false
Assert(new ContractEmployee())
Tutte le regole contenenti il tipo Employee o il tipo ContractEmployee nelle relative condizioni vengono rivalutate dopo l'asserzione. Il tipo di ereditarietà utilizzato in questo esempio è l'implementazione. Sebbene venga dichiarata solo la classe derivata, se le regole vengono scritte tramite i metodi della classe di base anziché della classe derivata, verrà dichiarata anche la classe di base.