我正在考虑使用规范模式进行验证.困难的是如何告诉用户为什么某些规范不满意.如果Specification.IsSatisfiedBy()
不仅会返回一个bool
值,而且还会失败的原因怎么办?它看起来像这样:
interface ISpecification<T>
{
CheckResult IsSatisfiedBy(T candidate);
}
Run Code Online (Sandbox Code Playgroud)
在哪里CheckResult
:
class CheckResult
{
public bool IsSatisfied { get; }
public string FailureReason { get; }
}
Run Code Online (Sandbox Code Playgroud)
在Fowler&Evans的工作中,有一个部分满足规范的概念,其目的是提供解释究竟不满足的内容.但是在该文档中,它被实现为附加方法remainderUnsatisfiedBy,它返回候选者未完成的规范.
所以问题是:当使用规范进行验证时,如何向用户提供不满足给定规范的反馈?我上面介绍的解决方案是否合适?
有没有办法根据该结构的JSON模式验证JSON结构?我看了,发现JSON.Net验证,但这不符合我的要求.
JSON.net做:
JsonSchema schema = JsonSchema.Parse(@"{
'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}");
JObject person = JObject.Parse(@"{
'name': 'James',
'hobbies': ['.NET', 'LOLCATS']
}");
bool valid = person.IsValid(schema);
// true
Run Code Online (Sandbox Code Playgroud)
这证实为真.
JsonSchema schema = JsonSchema.Parse(@"{
'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}");
JObject person = JObject.Parse(@"{
'surname': 2,
'hobbies': ['.NET', 'LOLCATS']
}");
bool valid = person.IsValid(schema);
Run Code Online (Sandbox Code Playgroud)
这也证实了这一点
JsonSchema schema = JsonSchema.Parse(@"{
'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}"); …
Run Code Online (Sandbox Code Playgroud)