VAB体验
我已使用 VAB 对项目进行验证。我会说这很好。我不会说它很棒。目前没有大问题。我确实发现我们确实需要创建一些自定义验证器,因为我们的需求没有开箱即用。所以它是可扩展的,这很好。我们确实遇到了配置工具无法解析我们的类型的问题(我认为这是加载依赖项的错误)。代码运行良好,但我们必须在没有工具的情况下进行一些配置。
验证数字唯一标识符
您使用范围验证器走在正确的轨道上。请注意,每个范围(上限和下限)都可以有 3 种不同的类型:Inclusive、Exclusive 和 Ignore。这应该涵盖大多数情况。在您的情况下,您可以将上限指定为忽略,下限指定为 1(含 1)(假设您希望 ProductId 为 1 或更大)。
在配置中,这看起来像:
<properties>
<property name="ProductId">
<validator lowerBound="1" lowerBoundType="Inclusive" upperBound="0"
upperBoundType="Ignore" negated="false" messageTemplate="Oops...too low." messageTemplateResourceName=""
messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RangeValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Range Validator" />
</property>
</properties>
验证业务对象属性
听起来你在正确的轨道上。您绝对应该始终验证对您的业务(或服务)层的输入。如果您还想在客户端层中执行验证,那么您可以跨层共享您的配置或实体(业务对象就是您所说的),但您必须确保配置或实体在层之间同步。如果您在两个不同的层中进行验证,要考虑的另一件事是 ValidationResults 将如何显示。VAB 已与 ASP.NET 集成,但一旦您调用业务层,您将不会拥有该集成,因此您将需要另一种(自定义)方式来显示这些错误。(这可能就像将错误转储到的标签一样简单。)
现在您说:啊,但是如果我在 Web 层进行验证,那么我应该捕获 ASP.NET 中的所有验证错误,并且它们可以很好地协同工作。真的。但这让我想到了最后一点。
VAB可能能够处理所有验证,但它可能无法处理复杂的验证。如果您有跨字段(或跨对象)验证,VAB 不会做得很好。此外,您可能需要在业务层中进行一些您不想在 Web 层中执行的自定义验证(例如,某些验证可能依赖于无法从 Web 层访问的数据库或外部服务)。因此,您最终可能会使用两种不同的实现来显示验证/错误消息。