Предположим, что у меня есть этот объект в моем DAL (ORM и т.д.)
public class Student
{
public string Name {get;set;}
public string Address {get;set;}
public string Phone {get;set;}
public Parent Parent {get;set;}
}
public class Parent
{
public string Name {get;set;}
public string Address {get;set;}
public string Phone {get;set;}
}
И у меня есть ViewModel, который выглядит так:
public class StudentDetailVM
{
public string Name {get;set;}
public string Address {get;set;}
public string Phone {get;set;}
public string ParentName {get;set;}
public string ParentPhone {get;set;}
}
В этом случае мне нужно сгладить объекты. Я могу сделать это с помощью инструмента, такого как Automapper, ValueInjector, или я мог бы сделать это вручную. Это утомительная работа, если есть много таких классов для обработки, но, по-видимому, существует компромисс эффективности производительности/разработчика между всеми тремя подходами.
Я ищу руководство по использованию Automapper vs Valueinjector против ручного сопоставления, Я уверен, что сопоставление вручную является самым быстрым, но насколько?
Являются ли некоторые сценарии намного медленнее/быстрее других (например, сглаживание и т.д.)?
Имеет ли смысл делать гибридный подход к отображению объектов между слоями?
Причина, по которой я спрашиваю, заключается в том, что проект Codeplex, называемый emitmapper, был создан для решения проблем производительности в automapper, и я помню, что видел комментарий, который сказал, что automapper может занимать до .5ms для отображения большого класса. (требуется ссылка)
Я также помню, как я видел статью, в которой описывается, как пользователи имеют более высокий шанс остаться на вашем сайте, если он загружается в пределах 70 мс, в отличие от 90 мс или более. (Я тоже ищу эту ссылку). Если automapper потребляет большую часть моего времени загрузки страницы, в сочетании с латентностью сети, то я вижу потенциальную возможность не использовать automapper и создавать ручные классы для моих страниц с большим объемом и придерживаться гибридного подхода.
В нижней строке: я бы сам запускал тесты, но я не знаю достаточно о внутренних компонентах .NET, чтобы создавать точные результаты, которые можно использовать в качестве рекомендаций для повторного использования.