Compatibilidad con herencia de clases en el motor de reglas de negocios
Una de las características clave de los lenguajes de programación orientada a objetos (OOP) es la herencia. La herencia es la capacidad de usar toda la funcionalidad de una clase existente y ampliar esa capacidad sin escribir de nuevo la clase original.
Business Rules Framework admite dos tipos de herencia de clases: implementación e interfaz. La herencia de implementación hace referencia a la capacidad de usar las propiedades y los métodos de una clase base sin codificación adicional. La herencia de interfaz hace referencia a la capacidad de usar sólo los nombres de las propiedades y métodos, pero la clase secundaria debe proporcionar la implementación.
Las reglas se pueden escribir en términos de una clase base común, pero los objetos afirmados en el motor pueden ser de clases derivadas. En el ejemplo siguiente, RegularEmployee y ContractEmployee son clases derivadas de la clase base Employee.
class Employee
{
public string Status()
{
// member definition
}
public string TimeInMonths()
{
// member definition
}
}
class ContractEmployee : Employee
{
// class definition
}
class RegularEmployee : Employee
{
// class definition
}
Imagine que tiene la siguiente regla.
Regla 1
IF Employee.TimeInMonths < 12
THEN Employee.Status = "New"
En tiempo de ejecución, si el usuario afirma dos objetos, una instancia de ContractEmployee y la otra una instancia de RegularEmployee, ambas instancias de objeto se evalúan con la regla descrita anteriormente.
El usuario también puede declarar objetos de clase derivadas en acciones mediante assert. Esto da lugar a que se evalúen de nuevo las reglas que contienen el objeto derivado y su tipo base en sus condiciones, como se muestra en el siguiente ejemplo.
Regla 2
IF Employee.Status = "Contract"
THEN Employee.Bonus = false
Assert(new ContractEmployee())
Todas las reglas que contienen el tipo Employee o el tipo ContractEmployee en sus condiciones se vuelven a evaluar después de la aserción. El tipo de herencia de este ejemplo es implementación. Incluso si sólo se afirma la clase derivada, la clase base se afirma también si las reglas se escriben con los métodos de la clase base en lugar de la clase derivada.