- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚发现了 .NET 的 NRules。如果字段/属性值无效,我想创建一个规则来阻止对象构造。例如,给定以下类:
public class Customer
{
public string Name { get; private set; }
public bool IsPreferred { get; set; }
public Customer(string name)
{
Name = name;
}
}
我想要创建一个规则,当“名称”为 null 或为空时会抛出异常,从而取消对象创建,并生成用户定义的消息:必须指定客户名称。
这可以用 NRules 完成吗,如果可以,它是如何完成的?
最佳答案
使用 NRules,您可以根据特定领域或对象模型编写规则。所以你需要一些对象来保存数据,这样你就可以将这些对象插入到规则 session 中,也可以将这些对象与规则进行匹配。我想对于验证场景,您将使用以下之一:
在更高的层次上,NRules 的最佳点是根据稳定的域模型来表达易变的业务逻辑。在这种情况下,您可以将验证逻辑分为两组 - 1) 稳定的验证并为域对象定义内在不变性,即客户名称不为空; 2) 易变的验证逻辑(即如果满足某些条件,客户是首选)。然后,您可以将类型 1 的验证逻辑编码为域模型本身中的断言,并将类型 2 的验证逻辑编码为这些域对象的规则。
无论采用哪种方式,在机械层面上,您可能希望验证规则为每个失败的验证插入一个 ValidationError,然后在结束时查询这些验证错误的 session 并阻止对象构建(如果有的话)。
ObjectUnderValidation match = null;
When()
.Match<ObjectUnderValidation>(() => match, x => x.ValidationCondition);
Then()
.Do(ctx => ctx.Insert(new ValidationError(match, "Message")));
稍后进行验证时:
var session = factory.CreateSession();
session.Insert(myObjectUnderValidation);
session.Fire();
var errors = session.Query<ValidationError>().ToList();
if (errors.Any())
//Don't construct
else
//Construct
您还可以在此处抽象一些样板代码,使其更易于在您的特定场景中使用。
关于nrules - 如何使用 NRules 创建验证规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32554222/
我刚刚发现了 .NET 的 NRules。如果字段/属性值无效,我想创建一个规则来阻止对象构造。例如,给定以下类: public class Customer { public string
我刚刚发现了 .NET 的 NRules。如果字段/属性值无效,我想创建一个规则来阻止对象构造。例如,给定以下类: public class Customer { public string
我正在尝试找出 BRE NRules 并得到了一些有效的示例,但很难匹配集合。 IEnumerable orders = null; When() .Match>(o => o.Where(c
NRules SimpleRule 的代码定义了如下规则: public class PreferredCustomerDiscountRule : Rule { public overrid
public class AllowAtleastOneCountryRule : Rule { public override void Define() { Pro
我正在使用 NRules 来定义所有继承自公共(public)基类的规则,该基类本身继承自 Rule。 当我使用 DSL 扩展插入一个包装匹配对象的新事实时,传递给扩展方法的匹配对象似乎是 null。
我正在使用 ABP Boilerplate 6.0 并将 NRules 与我们的平台集成。 我能够使下面的规则起作用,但问题是我不能在规则条件中使用注入(inject)的“_questionRespo
我是一名优秀的程序员,十分优秀!