VAB Experience
Я использовал VAB для проверки проектов. Я бы сказал, что это хорошо. Я бы не сказал, что это здорово. Пока никаких серьезных проблем. Я обнаружил, что нам нужно было создать несколько пользовательских валидаторов, потому что наши потребности не были учтены сразу. Так что это расширяемое, что хорошо. У нас были проблемы с инструментом настройки , так как мы не смогли разрешить наши типы (я думаю, что это ошибка загрузки зависимостей). Код работает нормально, но нам пришлось выполнить настройку без инструмента.
Проверка числового уникального идентификатора
Вы на правильном пути с валидатором диапазона. Имейте в виду, что каждый диапазон (верхний и нижний) может иметь 3 различных типа: включительно, исключительно и игнорировать. Это должно охватывать большинство случаев. В вашем случае вы можете указать верхнюю границу как игнорирующую, а нижнюю - как 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, но как только вы вызовете бизнес-уровень, у вас не будет такой интеграции, поэтому вам потребуется другой (настраиваемый) способ отображения этих ошибок. (Это может быть так же просто, как метка, чтобы сбросить ошибки).
Теперь вы говорите: ах, но если я проверил на веб-уровне, я должен отловить все ошибки валидации в ASP.NET, и все это прекрасно работает вместе. Правда. Но это подводит меня к моему последнему пункту.
VAB может быть в состоянии обрабатывать все проверки, но, вероятно, не сможет обрабатывать сложные проверки. VAB не будет работать хорошо, если у вас есть перекрестные проверки (или перекрестные объекты). Кроме того, вам может потребоваться некоторая пользовательская проверка на вашем бизнес-уровне, которую вы не хотите выполнять на веб-уровне (например, возможно, некоторая проверка зависит от баз данных или внешних служб, которые недоступны с веб-уровня). Таким образом, вполне возможно, что у вас могут появиться две разные реализации для отображения сообщений проверки / ошибки.