2010-06-04 2 views
2

При разработке в ASP.NET MVC я использую настройку ViewModel 1: 1, где viewmodel содержит только данные, необходимые для представления. Я также использую аннотации данных для проверки на viewmodel.Аннотации данных и MVC 1: 1 ViewModel

Я обеспокоен тем, что это не соответствует принципу DRY, поскольку мне приходится дублировать проверку на всех моих сайтах. Я хотел бы иметь валидацию в одном месте (моя модель домена), но поскольку я никогда не отправляю модель домена в модель представления, это невозможно.

Мне было интересно, если кто-то еще столкнулся с этой проблемой и нашел подходящий способ работы с ней или имеет лучшее решение?

ответ

6

У нас были подобные проблемы, когда мы приняли подход ViewModel 1: 1. Мы обнаружили, что 1) дублирование меньше, чем кажется на первый взгляд, и 2) что общая ремонтопригодность и мощность приложения улучшены настолько, что любые затраты, не связанные с СУБД, стоят цены.

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

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

1: 1 ViewModels также значительно облегчают тестируемость. Тесты для ViewModel могут быть записаны независимо от уровня домена, что делает модульные тесты более легкими, более удобными и вообще полезными. Аналогично, вы можете протестировать модель домена без умственных искажений того, как входные потоки проходят через пользовательский интерфейс. Это также придерживается принципа безопасности «защиты в глубину».

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

Наконец, если вы ожидаете наличия уровня веб-сервисов, вы обнаружите, что разделение моделей доменов и представлений выплачивает дивиденды. Без него модель домена неизбежно записывается для поддержки пользовательского интерфейса. Когда вы накладываете слой на интерфейс службы, вы обнаружите несоответствие импеданса.

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

+0

Спасибо @Rob, вы покрыли мои основные проблемы! Я думал, что получаю больше отзывов от людей, но, похоже, это не так: S – WDuffy

Смежные вопросы