Каковы преимущества использования automapper?

мой вопрос может быть глупым, но я уверен, что пропустил очень важную часть проблемы. Мне нужно сделать сопоставление объектов (между классами домена, используемыми в проекте C#, и классами, которые отправляются на flash-клиенты).

моим первым выбором был Automapper. Но у меня были некоторые проблемы с ним (вложенные свойства, а не конструктор без параметров). Оказывается, не так просто сопоставить действительно сложный тип с automapper.

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

  ClassA GetClassAByClassB(ClassB pObj)

   {  
     ClassA objA = new ClassA();  
     objA.Prop1 = pObj.Prop1;  
     objA.NestedType.Prop2 = pObj.Prop2;  
     //....Some more.....  
     return objA;  
   }  

Он имеет точно такой же уровень гибкости, как отображение с помощью Automapper. Вам все равно нужно указать, какое свойство из исходного объекта копируется в какие свойства в объекте назначения. Вы просто делаете это, используя'=', а не лямбда-выражение.

но если вы что-то меняете в своих классах домена, вы все равно должны изменить эту часть "сопоставления". Итак, что главное, что должно убедить меня использовать Automapper (как я сказал в начале, что я уверен, что пропустил что-то важное).

3 ответов


потому что с AutoMapper вы не должны реализовать эти методы ;-)

ваш подход требует написания достаточно много

classA.propA = classB.propA;
classA.propB = classB.propB;
classA.propC = classB.propC;
classA.propD = classB.propD;
classA.propE = classB.propE;

AutoMapper использует соглашения, чтобы вычислить его сам. Более того, вам не нужно беспокоиться о pObj == null (ваш код будет бросать NulLReferenceException в данном случае).

вы также можете определить преобразования на своей карте (т. е. строка в DateTime).

Mapper.CreateMap<User, UserModel>().ForMember(d => d.LastLogin, c => c.MapFrom<DateTime?>(u => u.Credential.LastLogin));

AutoMapper поддерживает вложенные свойства что ж.

подробнее здесь: введение и образцы AutoMapper


единственное преимущество, которое утверждает AutoMapper, - это сопоставление по соглашению. Вот цитата из "введение и образцы AutoMapper"


иногда с помощью картографов, это очень трудно отследить ошибки. Для EG. если мы неправильно пишем Employee в классе данных с Emplyee в классе модели view, картографы, такие как tiny mappers, не создают исключений, если мы явно не устанавливаем картографы как строгое отображение, и в течение этого времени код компилируется и работает отлично, но мы не можем отслеживать ошибки. Эта ситуация редко случается с ручным отображением, поэтому ручное отображение объектов имеет некоторые преимущества перед автоматическим отображением.