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