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);
}