BestPractice: Pros и Cong для использования automafper или linq (linq к объектам) для сопоставления между моделью домена и моделью презентации

StackOverflow https://stackoverflow.com/questions/2636575

Вопрос

Как вы думаете? Как вы отображаете карту между моделью домена и презентации?

Это было полезно?

Решение

Цитируя часть ответа от Еще один вопрос автоматической:

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

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

AutomApper является примером 2.

Linq к объектам является примером 1 - это просто происходит немного менее болезненным, чем написание кода отображения объекта Vanila Object к объекту.

С точки зрения плюсов и минусов:

  • AutomaPper должен значительно уменьшить количество кода, которое вы должны написать по сравнению с LINQ, поскольку он использует констеции для определения сопоставлений по умолчанию. Использование LINQ, эти сопоставления по умолчанию должны быть определены.

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

  • Как и во всех сторонних DLL, использование AuthoATPPER введет еще одну зависимость и требует небольшой кривой обучения (обратите внимание, что будет кривой обучения для тех разработчиков, которые также не использовали LINQ раньше).

Примечание, автоматически можно использовать в сочетании с linq (и linq2sql) - Еще один пост автоматистно что объясняет некоторые из более тонких точек.

Другие советы

Существуют также недостатки в использовании automatpster, а некоторые из этих недостатков применяются в целом для программирования по Конвенции (в отличие от явно написания кода).

Скажем, у вас есть два класса C # -

namespace MyDtoNamespace {
    public class MyClass {
        public int Id { get; set; }
}}

namespace MyBusinessLayerNamespace {
    public class MyClass {
        public int Id { get; set; }
}}

AutomaPPer будет отображаться между этими двумя классами хорошо с небольшими явными необходимой конфигурацией.

Но позже, скажем, разработчик считает переименовать один из этих свойств идентификатора для чего-то другого

namespace MyBusinessLayerNamespace {
    public class MyClass {
        public int MyNewIdentifierVariableName { get; set; }
}}

Я тщательно ищу ссылки в визуальной студии и рассмотрите влияние переименования на эти ссылки - но поскольку mydtonamespace.myclass.id не явно ссылается на mybusinesslayernamespace.myclass.id, я никогда не вижу этого.

Когда Visual Studio или другой инструмент автоматически переименовывает все происшествия переменной для меня в растворе, сопоставление коммутраторов.

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

Я, конечно, не спорю, чтобы вообще не избежать автоматов, просто отметив, что серьезная проблема с программированием по Конвенции.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top