首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是在NRules中定义规则的正确方式吗?

这是在NRules中定义规则的正确方式吗?
EN

Stack Overflow用户
提问于 2016-03-03 04:01:57
回答 1查看 2.8K关注 0票数 4
代码语言:javascript
复制
public class AllowAtleastOneCountryRule : Rule
{
    public override void Define()
    {
        Profile profile = null;

        string str = @"At least one country has to be defined as 'permitted'";


        bool enabled = AllRules.GetDict()[str];//Checks if the rule is enabled


        When()
            .Match<FundProfile>(() => productProfile)
            .Exists<FundProfile>(p => enabled, p => RuleViolation(p));


        Then()
            .Do(_ => profile .DisplayError(str));


    }


    bool RuleViolation(FundProfile pp)
    {
        try
        {


            if (pp.DefaultMode.Equals(Helper.DefaultModes.Allow.ToString()))
            {
                if (pp.ListOfCountries.Count < pp.TotalCountries)//Okay
                    return false;
                else//Rule violation
                    return true;
            }
            else//Deny
            {
                if (pp.ListOfCountries.Count > 0)//Okay
                    return false;
                else//Rule violation
                    return true;
            }

        }
        catch(Exception e)
        {
            throw new InvalidRuleException(e.Message);
        }

    }
}

正如您所看到的,我正在使用规则调用另一个方法来计算几个条件。我觉得我并没有在这里使用Rete算法的全部功能,因为我是在为自己预先评估事情。有没有人可以指导我如何处理这个问题?

EN

回答 1

Stack Overflow用户

发布于 2017-08-11 00:11:06

你的代码看起来不错,你有一个复杂的规则,并且你封装了它。

遵循文档和示例,您可以实现一个优雅的解决方案。

使用.Query而不是.Exists实现complex logic,将封装的逻辑转换为linq或λ表达式。然后应用DSL Extension,使您的代码更具可读性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35756983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档