BestPractice: плюсы и минусы использования AutoMapper или LINQ (LINQ to Objects) для сопоставления между моделью предметной области и моделью представления.

Что вы думаете? Как вы сопоставляете свою предметную область и модель представления?


person Rookian    schedule 14.04.2010    source источник


Ответы (3)


Цитирование части ответа из другого вопроса Automapper:

Если у вас есть объект одного типа и вы хотите заполнить свойства объекта другого типа, используя свойства первого типа, у вас есть два варианта:

  1. Напишите код для такого сопоставления вручную.
  2. Используйте инструмент, который автоматически сделает это за вас.

AutoMapper - это пример 2.

LINQ to Objects - это пример 1 - просто это немного менее болезненно, чем написание ванильного кода сопоставления объектов с объектами.

Что касается плюсов и минусов:

  • Automapper должен значительно сократить объем кода, который вам нужно написать, по сравнению с LINQ, поскольку он использует соглашения для определения сопоставлений по умолчанию. Эти сопоставления по умолчанию должны быть определены с помощью LINQ.

  • Используя LINQ, необходимо будет определить сопоставления в обоих направлениях - Automapper должен иметь возможность решать это автоматически при использовании соглашений.

  • Как и в случае со всеми сторонними dll, использование Automapper представит другую зависимость и потребует небольшого обучения (обратите внимание, что для тех разработчиков, которые раньше также не использовали LINQ, возникнет кривая обучения).

Обратите внимание, что Automapper можно использовать вместе с LINQ (и LINQ2SQL) - еще один пост Automapper, который объясняет некоторые тонкости.

person Bermo    schedule 15.04.2010

Есть также недостатки в использовании 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, просто отмечу, что это основная проблема программирования по соглашению.

person Dughall    schedule 06.02.2017

http://bhavinsurela.com/linq-and-automapper-view-model-and-data-model/ может быть тем, что вы ищете.

person Bhavin    schedule 30.01.2012
comment
вот он, плакат был куплен твиттером и закрыл блог. bhavinsurela.com/linq-and-automapper-view-model -and-data-model (ps: -1 не требуется) - person Bhavin; 14.04.2014