我们可以使用扩展方法用于构建业务规则引擎?
-
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();
OR
// create multicasted delegate of type Func<ProductBiz,bool> say rulesetDelegate
productBiz.ApplyRules(rulesetDelegate);
只是想问问我前潜入深海淹死。
什么是这种方法???
的潜在的缺陷在预先感谢
解决方案
我不知道你所说的可能是什么意思。这当然可以这样写一个规则引擎,你已经demo'd如何实现这一目标的大纲。
不要忘了扩展方法上的静态方法顶部只是语法糖。询问是否可以做扩展方法编程的X型不超过询问是否可以做静态方法编程的X型不同。静态方法可能不会那么好,但他们也同样强大。
其他提示
如果你正在寻找改变在运行时的规则,那么你可能要考虑更多类似 MEF 或相似。
直到您编译,那么它的设置并锁定,从你的意见,你要寻找的运行时间灵活性的声音您的解决方案是罚款。
看的业务规则CSLA http://lhotka.net/ 实施。在您定义的规则瓦特/特定的签名,并将其添加到该对象的规则存储,无论是在一类级别或实例级别。您正在尝试做的语法是倒胃口,但该方法(通过定义其在运行时执行静态方法的业务规则)是CSLA做什么。
不隶属于 StackOverflow