Я обновляю свои знания об API Automapper.Инъекция и/или насмешка Automapper: зачем?
Изучая интерфейс IMapper
, я нашел несколько сообщений об инъекции зависимостей и Automapper, например. this и this (они относятся к .NET Core, но это не имеет значения в контексте вопроса).
Предполагая, что типичное использование картографами как Automapper является:
public class Person
{
// person properties here
}
public class PersonDto
{
// person DTO properties here
}
public class SomeApi
{
// other code here
public PersonDto FindByName(string name)
{
var person = dbContext.People.FirstOrDefault(_ => _.Name == name);
// mapper is IMapper
return mapper.Map<PersonDto>(person);
}
}
почему мы хотим внедрить и/или макет IMapper
?
Я понимаю, зачем вводить такие вещи, как dbContext
, может быть полезно - при написании модульного теста вы должны как-то настроить тестовую среду, чтобы изолировать тестовый код от внешнего мира.
Но какой смысл для картографа?
Я имею в виду, отображение является частью логики метода. Это не «внешний мир». Это то, на что был написан метод, и это то, что нужно протестировать, но не издеваться.
Если я переписать FindByName
без использования Automapper, код будет выглядеть следующим образом:
public PersonDto FindByName(string name)
{
var person = dbContext.People.FirstOrDefault(_ => _.Name == name);
if (person == null)
return null;
return new PersonDto
{
Name = person.Name,
// etc
};
}
Итак, что же мы инъекционный/насмешливый здесь? Операторы присваивания? Шутки в сторону?
Он выглядит как инъекция зависимостей для инъекций зависимостей без какой-либо выгоды.
Я что-то не хватает? Возможно, бывают случаи, когда инъекция/издевка Automapper действительно полезна (меня интересуют случаи, которые можно найти на практике, а не в теоретических)?
Я согласен. У меня одинаковое представление: сопоставление - это внутренние детали метода, а в качестве клиента мне не нужно заботиться о том, выполняет ли метод ручное сопоставление или использует AutoMapper. В этом случае я считаю, что IMapper является чрезмерной абстракцией. –