ASP.Net MVC2 Проверка двух ViewModel одного и того же класса по-разному с помощью DataAnnotations - PullRequest
2 голосов
/ 08 января 2011

Я использую DataAnnotations для проверки пользовательского класса (автоматически сгенерированного LINQ to SQL) с помощью тега MetadataType в верхней части класса.Я люблю DataAnnotations, и он хорошо работает в простых, распространенных сценариях.Например,

[MetadataType(typeof(Person_Validation))]
public class Person

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

Моя ситуация: некоторые поля обязательны для публикации на www-покрытие сайта, но не обязательно для внутреннего админа сайта.Но на обоих сайтах есть представление, которое «создает новый» одного и того же объекта / класса.

Здесь оно становится поверхностями АДА DataAnnotations ..

Я пробовал использовать две разные модели представления спроверка применяется к каждому из них, два класса, которые наследуются от Person с различной проверкой, применяемой к каждому из них.Но все дороги, кажется, конфликтуют с принципами DRY, и вы в конечном итоге где-то вдоль линии, полностью переопределив все свойства для базовой структуры класса.Вам не нужно делать это, когда у вас есть только одно установленное правило проверки.Так что это очень быстро становится адом и непрактичным для сложных объектов.

Возможно ли это с помощью DataAnnotations и какова лучшая архитектура DRY?

1 Ответ

1 голос
/ 08 января 2011

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

ОБНОВЛЕНИЕ:

Регистрируясь в Automapper, основное использование выглядит примерно так:

  • Сначала вы должны определить свои отображения.Это позволяет autopper заранее выяснить, как отображать объекты.Вам нужно сделать это только один раз в приложении, поэтому хорошее место для этого в приложении ASP.NET - в Application_Start () в Global.asax.Для каждой пары классов, между которыми вы хотите отобразить, позвоните: Mapper.CreateMap<SourceType, DestinationType>();

  • Затем в коде вашего приложения для создания карты вы просто используете:

var destinationObject = Mapper.Map<SourceType, DestinationType>(sourceOjbect);

...