我希望做这样的事情
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();
OR
// create multicasted delegate of type Func<ProductBiz,bool> say rulesetDelegate
productBiz.ApplyRules(rulesetDelegate);
在深潜并淹死之前,我想问一下。
这种方法有哪些潜在的缺陷?
提前致谢
答案 0 :(得分:2)
我不确定你的意思是什么。以这种方式编写规则引擎当然是可能的,并且您已经演示了如何实现这一目标的大纲。
不要忘记,扩展方法只是静态方法之上的语法糖。询问你是否可以使用扩展方法进行X类编程与询问是否可以使用静态方法进行X类编程没什么不同。静态方法可能看起来不太好,但它们同样强大。
答案 1 :(得分:2)
如果您正在考虑在运行时更改规则,那么您可能需要考虑更像MEF或类似的内容。
你的解决方案很好,直到你编译,然后它被设置和锁定,从你的评论的声音,你正在寻找运行时灵活性。
答案 2 :(得分:2)
查看CSLA http://lhotka.net/中业务规则的实现。您可以在其中定义具有特定签名的规则,并将其添加到对象的规则存储中,无论是在类级别还是实例级别。您尝试执行的操作的语法是令人反感的,但方法(通过在运行时执行的静态方法定义业务规则)正是CSLA所做的。