我正在为我们的一个部门写一个数据验证实用程序,它有以下要求。-动态添加新的业务实体-为实体动态添加新的验证。-显示业务实体及其验证列表的UI -用户可以选择开始验证所有或选定的业务实体验证。-如果任何验证失败,UI将显示验证错误消息。-即使任何验证失败,系统也应继续进行下一次验证,从而验证所有已配置的验证。
在网上搜索后,我发现下面两个有希望的设计模式满足了我的业务需求,一个是id Decorator模式,另一个是命令链(也就是责任链)。现在我的问题是哪一个更好?谁有更好的主意?
谢谢
发布于 2010-12-08 09:11:36
我想你想要的是Specification Pattern。所以你会这样做:
public void StartDateNotInPastSpecification : ISpecification<ISomeBusinessObject>
{
public bool IsSatisfiedBy(ISomeBusinessObject myBusinessObject)
{
return myBusinessObject.StartDate >= DateTime.Now;
}
}这种模式的好处是,每个规则都可以很容易地单独测试,并且您可以选择何时应用验证规则(而不是某些框架将此决定强加给您)。
发布于 2012-04-28 06:32:24
我也在使用规范模式。这是它的一个基本实现。
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);
}
}在这个实现中,我只是在构造函数中传递了一个谓词,如下所示:
var specification = new Specification<SomeDomainClass>(x => x.SomeDomainBoolMethod());我的业务对象中有几个bool方法,而不是几个类(域中的每个条件一个)。
https://stackoverflow.com/questions/4376394
复制相似问题