Должны ли мы отображать перечисления в многослойных проектах? - PullRequest
0 голосов
/ 25 марта 2019

При кодировании корпоративных приложений всегда существует 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 в другом слое. Добавление ссылки со всех слоев на слой домена - это то, что возможно.

Так что мой вопрос в том, должны ли мы отображать перечисления между слоями, или мы должны использовать исходное перечисление там, где оно было первоначально объявлено?

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Все, что я могу предложить по этому вопросу, - это мое мнение, но когда я сталкиваюсь с той же проблемой, я использую комбинацию обоих решений. Если перечисление действительно является сквозной задачей, то оно распределяется по всему проекту. Однако, когда enum может быть ограничен до уровня, и тогда мне нужно только его подмножество в другом слое, тогда это отображается. Просто будьте осторожны во втором случае, я обнаруживаю, что когда я возвращаюсь к нему через несколько лет, требуется минута, чтобы вспомнить, что к чему;)

0 голосов
/ 25 марта 2019

Вы должны использовать Shared project для совместного использования Enums или любого общего кода между слоями. Подробнее о совместном проекте здесь

...