C# 验证设计模式
我正在为我们的一个部门编写一个数据验证实用程序,该部门有以下要求。 -动态添加新业务实体 -向实体动态添加新验证。 -显示业务实体及其有效性列表的UI -用户可以选择对所有或选定的业务实体validaiton启动验证。 -如果任何验证失败,UI将显示验证错误消息。 -即使任何验证失败,系统也应继续进行下一次验证,从而验证所有配置的验证 在搜索互联网后,我发现以下两种符合我业务需求的promissing设计模式:一种是id装饰模式,另一种是命令链(也称为责任链)。现在我的问题是哪一个更好?有人有更好的主意吗C# 验证设计模式,c#,.net,validation,design-patterns,C#,.net,Validation,Design Patterns,我正在为我们的一个部门编写一个数据验证实用程序,该部门有以下要求。 -动态添加新业务实体 -向实体动态添加新验证。 -显示业务实体及其有效性列表的UI -用户可以选择对所有或选定的业务实体validaiton启动验证。 -如果任何验证失败,UI将显示验证错误消息。 -即使任何验证失败,系统也应继续进行下一次验证,从而验证所有配置的验证 在搜索互联网后,我发现以下两种符合我业务需求的promissing设计模式:一种是id装饰模式,另一种是命令链(也称为责任链)。现在我的问题是哪一个更好?有人有更
谢谢我想你想要的是。所以你可以这样做:
public void StartDateNotInPastSpecification : ISpecification<ISomeBusinessObject>
{
public bool IsSatisfiedBy(ISomeBusinessObject myBusinessObject)
{
return myBusinessObject.StartDate >= DateTime.Now;
}
}
var specification = new Specification<SomeDomainClass>(x => x.SomeDomainBoolMethod());
public void startDateNotInCastSpecification:isSpecification
{
公共bool由(ISomeBusinessObject myBusinessObject)满足
{
返回myBusinessObject.StartDate>=DateTime.Now;
}
}
这个模式的好处是,每个规则都可以很容易地单独测试,您可以选择何时应用验证规则(与一些将此决定强加给您的框架相反)。我也在使用规范模式。这是它的一个基本实现
public class Specification<T, E> : ISpecification<T, E>
{
private Predicate<T> predicate;
public Specification(Predicate<T> predicate)
{
this.predicate = predicate;
}
public bool IsSatisfiedBy(T candidate)
{
return this.predicate.Invoke(candidate);
}
}
公共类规范:i规范
{
私有谓词;
公共规范(谓词)
{
this.predicate=谓词;
}
公共学校(T候选人)满意
{
返回this.predicate.Invoke(候选者);
}
}
在这个实现中,我只需在构造函数中传递一个谓词,如下所示:
public void StartDateNotInPastSpecification : ISpecification<ISomeBusinessObject>
{
public bool IsSatisfiedBy(ISomeBusinessObject myBusinessObject)
{
return myBusinessObject.StartDate >= DateTime.Now;
}
}
var specification = new Specification<SomeDomainClass>(x => x.SomeDomainBoolMethod());
var规范=新规范(x=>x.SomeDomainBoolMethod());
我的业务对象中有几个bool方法,而不是几个类(我的域中每个条件一个)。我想您可能需要重新表述您的问题。你能清楚地说明你想用命令链模式做什么吗?你能添加/重写示例使用代码以包含更多解释性的类/方法名吗?