Что вы думаете? Как вы сопоставляете свою предметную область и модель представления?
BestPractice: плюсы и минусы использования AutoMapper или LINQ (LINQ to Objects) для сопоставления между моделью предметной области и моделью представления.
Ответы (3)
Цитирование части ответа из другого вопроса Automapper:
Если у вас есть объект одного типа и вы хотите заполнить свойства объекта другого типа, используя свойства первого типа, у вас есть два варианта:
- Напишите код для такого сопоставления вручную.
- Используйте инструмент, который автоматически сделает это за вас.
AutoMapper - это пример 2.
LINQ to Objects - это пример 1 - просто это немного менее болезненно, чем написание ванильного кода сопоставления объектов с объектами.
Что касается плюсов и минусов:
Automapper должен значительно сократить объем кода, который вам нужно написать, по сравнению с LINQ, поскольку он использует соглашения для определения сопоставлений по умолчанию. Эти сопоставления по умолчанию должны быть определены с помощью LINQ.
Используя LINQ, необходимо будет определить сопоставления в обоих направлениях - Automapper должен иметь возможность решать это автоматически при использовании соглашений.
Как и в случае со всеми сторонними dll, использование Automapper представит другую зависимость и потребует небольшого обучения (обратите внимание, что для тех разработчиков, которые раньше также не использовали LINQ, возникнет кривая обучения).
Обратите внимание, что Automapper можно использовать вместе с LINQ (и LINQ2SQL) - еще один пост Automapper, который объясняет некоторые тонкости.
Есть также недостатки в использовании AutoMapper, и некоторые из этих недостатков обычно относятся к программированию по соглашению (в отличие от написания кода явно).
Скажем, у вас есть два класса C # -
namespace MyDtoNamespace {
public class MyClass {
public int Id { get; set; }
}}
namespace MyBusinessLayerNamespace {
public class MyClass {
public int Id { get; set; }
}}
AutoMapper будет красиво отображать эти два класса с небольшой явной конфигурацией.
Но позже, скажем, разработчик рассматривает возможность переименования одного из этих свойств Id во что-то другое, например
namespace MyBusinessLayerNamespace {
public class MyClass {
public int MyNewIdentifierVariableName { get; set; }
}}
Я тщательно ищу ссылки в Visual Studio и рассматриваю влияние переименования на эти ссылки, но поскольку MyDtoNamespace.MyClass.Id явно не ссылается на MyBusinessLayerNamespace.MyClass.Id, я никогда его не вижу.
Когда Visual Studio или другой инструмент автоматически переименовывает все вхождения переменной для меня в решении, отображение AutoMapper прерывается.
Я могу узнать это только во время выполнения, проблем во время компиляции нет. В идеале у меня есть модульные тесты для проверки того, что мое отображение работает так, как я надеюсь, но даже в этом случае возможность ошибок времени выполнения во время рефакторинга - хорошая причина предпочесть писать явный код сопоставления.
Я, конечно, не пытаюсь полностью отказаться от AutoMapper, просто отмечу, что это основная проблема программирования по соглашению.
http://bhavinsurela.com/linq-and-automapper-view-model-and-data-model/ может быть тем, что вы ищете.