首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证设计模式

验证设计模式
EN

Stack Overflow用户
提问于 2010-12-07 20:07:46
回答 2查看 10.1K关注 0票数 6

我正在为我们的一个部门写一个数据验证实用程序,它有以下要求。-动态添加新的业务实体-为实体动态添加新的验证。-显示业务实体及其验证列表的UI -用户可以选择开始验证所有或选定的业务实体验证。-如果任何验证失败,UI将显示验证错误消息。-即使任何验证失败,系统也应继续进行下一次验证,从而验证所有已配置的验证。

在网上搜索后,我发现下面两个有希望的设计模式满足了我的业务需求,一个是id Decorator模式,另一个是命令链(也就是责任链)。现在我的问题是哪一个更好?谁有更好的主意?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2010-12-08 09:11:36

我想你想要的是Specification Pattern。所以你会这样做:

代码语言:javascript
复制
public void StartDateNotInPastSpecification : ISpecification<ISomeBusinessObject>
{
  public bool IsSatisfiedBy(ISomeBusinessObject myBusinessObject)
  {
    return myBusinessObject.StartDate >= DateTime.Now;
  }
}

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

票数 7
EN

Stack Overflow用户

发布于 2012-04-28 06:32:24

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

代码语言:javascript
复制
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);
    }
}

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

代码语言:javascript
复制
var specification = new Specification<SomeDomainClass>(x => x.SomeDomainBoolMethod());

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

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

https://stackoverflow.com/questions/4376394

复制
相关文章

相似问题

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