Podemos utilizar métodos de extensión para la construcción de motores de reglas de negocio?
-
20-09-2019 - |
Pregunta
Estoy buscando para hacer algo como esto
public class ProductBiz: BizBase<Product> {
public List<String> BrokenRules {get;set;}
// Some kind of data + biz operation implementation
}
public static class ProductBizExtensions{
public ProductBiz Rule1(this ProductBiz prodBiz)
{}
public ProductBiz Rule2(this ProductBiz prodBiz)
{}
public bool ApplyRules (this ProductBiz prodBiz, Func<ProductBiz,bool> ruleset){}
}
A continuación, en el código de cliente utilizarlo como
productBiz.Rule1().Rule2();
productBiz.Rule2().Rule1();
o
// create multicasted delegate of type Func<ProductBiz,bool> say rulesetDelegate
productBiz.ApplyRules(rulesetDelegate);
Sólo quería preguntar antes de sumergirme profundamente y ahogo.
¿Cuáles son los peligros potenciales con este enfoque ???
Gracias de antemano
Solución
No estoy seguro de lo que entendemos por posible. Es ciertamente posible escribir un motor de reglas de esta manera y que ha demo'd un esbozo de cómo lograr esto.
No hay que olvidar que los métodos de extensión son sólo azúcar sintáctico en la parte superior de los métodos estáticos. Preguntando si se puede hacer tipo X de la programación con los métodos de extensión no es diferente a preguntar si se puede hacer tipo X de la programación con los métodos estáticos. Los métodos estáticos pueden no parecían tan agradables pero son igual de potente.
Otros consejos
Si usted está buscando en el cambio de las reglas en tiempo de ejecución a continuación, es posible que desee considerar algo más como MEF o similar.
Su solución es bien hasta compila, entonces está configurado y bloqueado, desde el sonido de sus comentarios que usted está buscando la flexibilidad de tiempo de ejecución.
Mire la aplicación de reglas de negocio en CSLA http://lhotka.net/ . En que defina una regla w / una firma en particular, y la agrega en almacén de reglas del objeto, ya sea a nivel de clase o nivel de instancia. La sintaxis de lo que está intentando hacer es desagradable, pero el método (la definición de reglas de negocio a través de los métodos estáticos que se ejecutan en tiempo de ejecución) es exactamente lo que hace CSLA.