Где и как проверить и отобразить ViewModel? - PullRequest
6 голосов
/ 07 мая 2010

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

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

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

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

Спасибо!

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

Ответы [ 4 ]

0 голосов
/ 13 мая 2010

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

0 голосов
/ 09 мая 2010

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

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

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

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


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

0 голосов
/ 09 мая 2010

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

На самом деле это работает очень хорошо, и код намного проще для чтения и поддержки

0 голосов
/ 07 мая 2010

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

...