我正在考虑使用规范模式进行验证。很难的是如何告诉用户为什么一些规范不满足。如果Specification.IsSatisfiedBy()不仅返回bool值,还会导致失败,该怎么办?它看起来像这样:
interface ISpecification<T> { CheckResult IsSatisfiedBy(T candidate); }
CheckResult是:
class CheckResult { public bool IsSatisfied { get; } public string FailureReason { get; } }
在Fowler & Evans工作中,有一个部分满意的规范的概念,其目的是提供什么是不满意的。然而,在该文档中,它被实现为附加的方法remainingUnsatisfiedBy,它返回由候选者未完成的规范。
虽然您可以使用规范类进行验证,但我建议您将其作为您域内的单独概念。您可能会发现,您需要重新使用相同的底层规范,但需要根据目的和上下文返回不同的“失败原因”。详见
this article。
原文链接:https://www.f2er.com/javaschema/282138.html上面引用的帖子的作者也亲切地分享了github的代码,并将代码发布为NCommon。特别审查这些领域:
规格:https://github.com/riteshrao/ncommon/tree/v1.2/NCommon/src/Specifications
验证:https://github.com/riteshrao/ncommon/tree/v1.2/NCommon/src/Rules(特别是ValidationResult和ValidationError的类)