При кодировании корпоративных приложений всегда существует n уровней. Мне лично не нравится использовать такие инструменты, как AutoMapper. Большинство причин, по которым я не использую Automapper, указаны здесь https://cezarypiatek.github.io/post/why-i-dont-use-automapper/
С течением времени это в значительной степени тот же объем работы, и ручное сопоставление дает большие преимущества IMO.
Что я делал до сих пор, так это то, что я бы отображал перечисления между слоями. Но у меня есть проблема с этим. Каждый слой не добавит дополнительное значение / контент в enum, это просто старое отображение. Я ненавижу это, особенно из-за того, что если нет подходящего значения сопоставления, вам придется выполнить одно из следующих действий (и ни одно из них не является хорошим решением)
например
Слой A
public enum Sometype
{
ACTIVE,
INACTIVE,
PENDING,
DELETED
}
Слой B
public enum Sometype
{
ACTIVE,
INACTIVE,
DELETED
}
Если вы добавите значение PENDING в слой A и забудете добавить PENDING в слой B, ваше отображение будет нарушено. Чтобы решить эту проблему, вы можете
а) выбрасывает исключение - не слишком стремится обнаружить ошибку в работе над такой тривиальной проблемой
b) ввести новое перечисление на уровне B - например, UNKNOWN (в качестве значения по умолчанию) - которое не добавляет значения в контекст уровня B, т.е. что такое НЕИЗВЕСТНЫЙ статус?
c) сопоставить перечисление со значением по умолчанию - что почти всегда будет неверно.
UPDATE
Если мы кодируем с использованием подхода DDD, большинство перечислений будет располагаться на уровне домена. Извлечение существенной части Домена в новый слой на самом деле не имеет никакого смысла, кроме возможности повторно использовать Enums в другом слое. Добавление ссылки со всех слоев на слой домена - это то, что возможно.
Так что мой вопрос в том, должны ли мы отображать перечисления между слоями, или мы должны использовать исходное перечисление там, где оно было первоначально объявлено?