Выполнение проверки бизнес-объекта.Как насчет содержащихся объектов? - PullRequest
0 голосов
/ 23 марта 2011

Я новичок в Enterprise Library.Я пытаюсь проверить бизнес-объект типа JuvenileClientContactItem.

. Объекты JuvenileClientContactItem содержат объекты, в данном случае два экземпляра объектов типа AddressType.

Когда я выполняю следующий вызов для проверки JuvenileClientContactItem, я ожидал, что все содержащиеся в нем объекты также будут проверены, и любые ошибки, обнаруженные в объекте PersonType, будут добавлены в коллекцию ValidationResults, но только проверки JuvenileClientContactItem oject были выполнены.

validationResults = validationService
    .Validate(Of JuvenileClientContactItem) _
    (juvenileClientContactItem, _
    "JuvenileClientContactItemRuleSet", "PersonTypeRuleSet")

Вот подпись функции проверки библиотеки предприятия:

Public Shared Function Validate(Of T)(ByVal target As T, _
    ByVal ParamArray rulesets() As String) _
    As Microsoft.Practices.EnterpriseLibrary.Validation.ValidationResults

Чтобы проверить два субобъекта Address в объекте JuvenileClientContactItem, мне нужно выполнить отдельные вызовык методу Validate, например:

residentaddressValidationResults = validationService
    .Validate(Of BusinessObjects.AddressType) _
    (juvenileClientContactItem.ResidenceAddress, _
    Me.View, "AddressTypeRuleSet")

Я испытываю желание написать свой собственный универсальный метод проверки, который использует отражение для проверки объекта, переданного для проверки, поиска содержащихся объектов, которые поддерживают самопроверку, и выполнения вызовови объединить результаты всех проверок в одну возвращенную коллекцию.Есть ли лучший подход?

Редактировать:

Следуя предложению, указанному ниже, я добавил этот код:

<System.Serializable()> _
<DataContract()> _
<HasSelfValidation()> _
<ObjectValidator()> _
Public Class AddressType

... И получил ошибку, что ObjectValidatorAttributeне может быть применено, потому что атрибут недопустим в этом типе объявления.

Почему?Как мне это исправить?

1 Ответ

1 голос
/ 23 марта 2011

Вы должны декорировать свойства типа TheJuvenileClientContactItem с помощью ObjectValidatorAttribute, поскольку блок приложения проверки не будет проверять графы объектов по умолчанию (чтобы предотвратить проблемы с производительностью и исключения переполнения стека).

...