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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top