validation设计模式

我正在为我们的一个部门提供数据validation实用程序,该实用程序具有以下要求。 – 动态添加新业务实体 – 动态地向实体添加新validation。 – 用于显示业务实体及其有效性列表的UI – 用户可以选择在所有或选定的业务实体有效性上启动validation。 – 如果任何validation失败,UI将显示validation错误消息。 – 即使任何validation失败,系统也应继续进行下一次validation,从而validation所有已配置的validation。

在搜索互联网后,我发现以下2个承诺设计模式,满足我的业务需求一个id装饰模式,另一个是命令链(又称责任链)。 现在我的问题是哪个更好? 有人有更好的主意吗?

谢谢

我想你想要的是规格模式 。 所以你会做这样的事情:

public void StartDateNotInPastSpecification : ISpecification { public bool IsSatisfiedBy(ISomeBusinessObject myBusinessObject) { return myBusinessObject.StartDate >= DateTime.Now; } } 

关于这种模式的好处是,每个规则都可以单独测试,并且您可以选择何时应用validation规则(而不是某些框架将这个决定强加给您)。

我也在使用规范模式。 这是它的基本实现。

 public class Specification : ISpecification { private Predicate predicate; public Specification(Predicate predicate) { this.predicate = predicate; } public bool IsSatisfiedBy(T candidate) { return this.predicate.Invoke(candidate); } } 

通过这个实现,我只是在构造函数中传递一个谓词,如下所示:

 var specification = new Specification(x => x.SomeDomainBoolMethod()); 

我的业务对象中有几个bool方法,而不是几个类(我的域中每个条件一个)。