私たちは、拡張メソッドは、ビジネスルールエンジンを構築するために使用することはできますか?
-
20-09-2019 - |
質問
私はこのような何かを探しています。
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){}
}
次に、クライアントコードで
としてそれを使用しますproductBiz.Rule1().Rule2();
productBiz.Rule2().Rule1();
または
// create multicasted delegate of type Func<ProductBiz,bool> say rulesetDelegate
productBiz.ApplyRules(rulesetDelegate);
私は深く潜ると溺れ前にお聞きしたかったのです。
タグ???このアプローチの潜在的な落とし穴は何ですか
事前に感謝します。
解決
私はあなたが可能で何を意味するかわかりません。それは、このようにルールエンジンを書くことは確かに可能だとあなたはこれを達成する方法の概要をデモを行ってきました。
その拡張メソッドは、静的メソッドの上だけ糖衣構文です忘れないでください。あなたが拡張メソッドを使用したプログラミングのXタイプを行うことができますかどうかを尋ねると、あなたは、静的メソッドを使用したプログラミングのXタイプを行うことができますかどうかを尋ねるよりも違いはありません。静的メソッドは、のように素敵に見えるかもしれないが、彼らは同じように強力です。
他のヒント
あなたは、実行時にルールを変更するに探している場合は、
あなたはより多くの MEF <ような何かを検討する必要があります/>または類似しました。
あなたは、実行時の柔軟性を探しているあなたのコメントの音から、それを設定し、ロックされてコンパイルされるまで、あなたのソリューションは、最大で結構です。
CSLA http://lhotka.net/ の中で、ビジネスルールの実装を見てください。そのでは、特定の署名/ wのルールを定義して、いずれかのクラスレベルまたはインスタンスレベルで、オブジェクトのルールストアに追加します。あなたがしようとしているものの構文は、オフ入れているが、(実行時に実行されている静的メソッドを使用してビジネスルールを定義する)方法はCSLAはまったく同じものです。
所属していません StackOverflow