Frage

Ich suche so etwas wie diese

zu tun
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){}
}

Dann in Client-Code verwenden Sie es als

productBiz.Rule1().Rule2();
productBiz.Rule2().Rule1();

oder

// create multicasted delegate of type Func<ProductBiz,bool> say rulesetDelegate

productBiz.ApplyRules(rulesetDelegate);

Ich wollte nur fragen, bevor ich tief tauchen und ertrinken.

Was sind die möglichen Gefahren bei diesem Ansatz ???

Vielen Dank im Voraus

War es hilfreich?

Lösung

Ich bin nicht sicher, was Sie durch mögliche bedeuten. Es ist sicherlich möglich, einen Regel-Engine auf diese Weise zu schreiben, und Sie haben einen Überblick über demo'd, wie dies zu erreichen.

nicht vergessen, dass Erweiterungsmethoden sind nur syntaktischer Zucker auf den statischen Methoden. Gefragt, ob Sie X Art der Programmierung mit Erweiterungsmethoden tun können, ist es nicht anders als zu fragen, ob Sie X Art der Programmierung mit statischen Methoden tun. Statische Methoden können nicht so schön aussehen, aber sie sind genauso leistungsfähig.

Andere Tipps

Sehen Sie sich die Umsetzung von Geschäftsregeln in CSLA http://lhotka.net/ . Dass Sie eine Regel w / einer bestimmten Signatur definieren, und fügen Sie sie in den Regelspeicher des Objekts, entweder auf Klassenebene oder Instanzebene. Die Syntax von dem, was Sie zu tun versuchen, ist abstoßend, aber die Methode (die Definition von Geschäftsregeln über statische Methoden, die zur Laufzeit ausgeführt werden) ist genau das, was CSLA der Fall ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top