Domain driven design 使用规范模式进行验证的DDD

Domain driven design 使用规范模式进行验证的DDD,domain-driven-design,Domain Driven Design,我正在考虑使用规范模式进行验证。困难的是如何告诉用户为什么不满足某些规范。如果Specification.issatifiedby()不仅返回bool值,还返回失败原因,该怎么办。它看起来像这样: interface ISpecification<T> { CheckResult IsSatisfiedBy(T candidate); } 在工作中,有一个部分满足规范的概念,其目的是解释什么是不满足的。然而,在该文档中,它作为附加方法remainderunsatifiedby实

我正在考虑使用规范模式进行验证。困难的是如何告诉用户为什么不满足某些规范。如果
Specification.issatifiedby()
不仅返回
bool
值,还返回失败原因,该怎么办。它看起来像这样:

interface ISpecification<T>
{
  CheckResult IsSatisfiedBy(T candidate);
}
在工作中,有一个部分满足规范的概念,其目的是解释什么是不满足的。然而,在该文档中,它作为附加方法remainderunsatifiedby实现,该方法返回候选者未完成的规范


所以问题是:当使用规范进行验证时,如何向用户提供给定规范未得到满足的反馈?我上面介绍的解决方案好吗?

尽管您可以使用规范类进行验证,但我建议您将它们作为单独的概念保留在您的域中。您可能会发现,您需要重复使用相同的底层规范,但需要根据目的和上下文返回不同的“失败原因”。有关更多详细信息,请参阅

上面提到的文章的作者也很乐意将代码分享给github,并将代码作为NCommon发布。特别审查这些领域:

规范


验证:(尤其是验证结果验证错误的类)

我也遇到了同样的问题。我为规范创建验证装饰器(代码是JAVA)

接口验证程序{
响应验证(T)
}
类抽象ValidationSpecificationCorator实现验证器{
规格说明书;
ValidationSpecificationCorator(规范规范){
this.spec=spec;
}
公共响应验证(T){
响应=新响应();
如果(!规格符合(t){
添加(错误(t));
}
回复;
)
公开摘要错误(T);
}

首先,你真的确定规范是正确的吗?我的意思是,每个规范都知道模型可能有效或无效的上下文吗?我不能说太多,因为我不知道域是什么样子。对于一些简单的验证,我认为可以,但这就是DataAnnotation验证属性现在正在做的。
class CheckResult
{
  public bool IsSatisfied { get; }
  public string FailureReason { get; }
}
  interface Validator<T>{
    Respond validate(T t)
  }


  class abstract ValidationSpecificationDecorator<T> implements Validator<T> {
  Specification<T> spec;

  ValidationSpecificationDecorator(Specification<T> spec){
    this.spec =  spec;
  }

  public Respond  validate(T t) {
    Respond respond = new Respond();
    if(!spec.IsSatisfiedBy(t){
       respond.add(error(t));
    }
    return respond;
  )

  public abstract Error error(T t);

  }