Где и как проверить и сопоставить ViewModel?

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

У меня вопрос, как мне выполнить проверку формы? должен ли я создавать отдельные классы проверки для каждого представления или сгруппировать их вместе? Я также не понимаю, как это будет выглядеть в коде.

Вот как я думаю в настоящее время модели проверки и представления вписываются в схему вещей:

Просмотр (некоторый пользовательский ввод) -> Контроллер -> FormValidation (ViewModel) -> (Если действительна карта ViewModel для модели домена) -> Служба уровня домена -> Инфраструктура

Спасибо!

P.S. Я использую Asp.net MVC с C #


person chobo    schedule 07.05.2010    source источник


Ответы (4)


Я предлагаю вам поместить свои правила проверки в свою модель предметной области. Это самый простой и повторяющийся способ (например, используйте System.ComponentModel.DataAnnotations - связыватель модели MVC 2 по умолчанию поддерживает его из коробки).
Если у вас сложная и широкая модель предметной области, и вы не выиграли Не зацикливайтесь на свойствах сопоставления с одинаковыми именами - попробуйте использовать AutoMapper, отличный инструмент для такого рода работы.

person chester89    schedule 07.05.2010

Проверить модель представления на уровне представления. Имейте в виду, что вам следует проверять только проверку, связанную с презентацией (дата в правильном формате, имя! = "" И т. Д.).

Asp.net Mvc имеет некоторую встроенную проверку поддержка, которой обычно достаточно для базовой проверки.

Сложная часть при применении дизайна на основе предметной области - это проверка предметной области. Могут существовать сложные правила, зависимости от репозиториев и тому подобное, из-за которых «проверка выполняется», не делая неумной модель домена довольно сложно.

Поэтому - кажется хорошей идеей никогда не позволять объекту домена переходить в состояние invalid и просто генерировать исключение в случае, если это произойдет.


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

person Arnis Lapsa    schedule 09.05.2010

Я экспериментировал с размещением проверки формы в ViewModel, а для сложной проверки бизнеса я использую уровень обслуживания.

Это действительно хорошо работает, и код намного легче читать и поддерживать

person chobo    schedule 09.05.2010

Это распространенный вопрос, и на него не всегда есть один правильный ответ. Ознакомьтесь с этот пост Дерика Бейли. Это хорошее обсуждение этого вопроса и есть несколько ссылок на другие замечательные сообщения по этому вопросу.

person MrDustpan    schedule 13.05.2010