После доменного дизайна с MVVM / WPF - PullRequest
3 голосов
/ 20 марта 2010

У меня есть простые POCO, и, поскольку INotifyPropertyChanged - это интерфейс для нужд представления, он реализован в ViewModel, а не в модели.

Теперь я хочу показать ошибки проверки в представлении рядом с каждым текстовым полем, введенным пользователем в данные.

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

Я не хочу помещать мой IsCustomerFirstNameLenthValid метод в модель, потому что у меня не было доступа к нему, или я просто не хочу загрязнять свои модели интерфейсом, не имеющим там никакого отношения!

Как я могу проверить свои голые POCO в ViewModel и перенаправить результаты в View, показывая ошибки проверки?

Ответы [ 3 ]

2 голосов
/ 20 марта 2010

Звучит так, как будто вы называете ваши голые POCO моделями представления и что у вас do есть доступ к ним.

Если это так, реализуйте на них IDataErrorInfo (используя любую поддержку, которую вы получаете от объекта модели, над которым у вас нет контроля). Ввод проверки в каждом установщике свойств является (менее привлекательным) вариантом, как и создание подкласса ValidationRule.

Вот ссылка на замечательную (хотя и устаревшую) статью Пола Стовелла, которая дает хороший обзор того, как спроектировать валидацию для приложения WPF.

НТН,
Berryl

2 голосов
/ 20 марта 2010

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

0 голосов
/ 24 марта 2010

Я бы предложил выполнить проверку в модели представления вместо модели. Это позволит вам легко реализовать IDateErrorInfo или другие механизмы для проверки. Как только проверка пройдена, вы можете синхронизировать ее с объектами модели POCO.

Существует еще один вариант, если вам абсолютно необходимо выполнить проверку непосредственно на объектах модели POCO, а не на вашей модели представления. Вы можете использовать прикладной блок проверки библиотеки предприятия (VAB) и устанавливать правила проверки с помощью конфигурации, а не атрибутов, которые могли бы загрязнять ваши объекты POCO. В заголовке вашего сообщения упоминается WPF, а не Silverlight, так что вам повезло, потому что вы можете использовать элемент управления проверкой Bennedik для автоматической обработки ошибок проверки в пользовательском интерфейсе.

...