Это хорошие вопросы !! Валидация принадлежит ОБА Модель и ViewModel (ы). Вот как я обычно к нему подхожу:
Сначала я добавлю в модель столько проверки, сколько смогу - это будут правила, которые не зависят от конкретной презентации. Например, предположим, что сотрудник в вашем домене недействителен, если у него нет свойства EmployeeNumber, которое не равно нулю, и шесть символов в длину, и каждый из шести символов должен быть цифрой.
Во-вторых, у меня есть базовый класс ViewModel, который реализует IDataErrorInfo. В этом базовом классе я в основном спрашиваю Модель, является ли она действительной, вызывая ошибку, если это не так (что легко перевести в представление с помощью IDataErrorInfo). Я также делаю методы реализации информации IDataError виртуальными, потому что ...
Наконец, будут крайние случаи, уникальные для данной презентации, которые не могут быть зафиксированы моделью. Для (надуманного) примера предположим, что у вас есть одна презентация, в которой сотрудник действителен, если введены только его имя и фамилия, и другая, для которой также требуется средний инициал. Хотя вы, безусловно, можете и должны иметь свойство компонента FullName / valueObject в Employee для проверки того, что это свойство не равно NULL, для каждой презентации необходим подкласс ViewModel, чтобы узнать, действительны ли в этом случае записи пользователя для свойств Fullame.
Наконец, вы можете и должны использовать Validator для проверки вашей Модели - мне нравится NHibernateValidator, но, безусловно, есть и другие (очень) хорошие. Большинство из них, включая NHibernate, будут поддерживать проверку атрибутов, которую вы ищете. Однако я предпочитаю более чистую альтернативу атрибутам, в результате чего я устанавливаю все правила валидации для своего валидатора в отдельном проекте (т.е. MyDomainImpl). Более чистый в смысле меньшего шума в модели и более четкого разделения проблем.
Не стесняйтесь задавать вопросы, если вам нужно. Также дайте себе время поработать над этим, пока у вас не появится подход, который работает для вас - это , а не тривиальная тема.
НТН,
Berryl