Мне интересно, где я должен определить перечисление, если у нас есть многоуровневая архитектура и классы с этим свойством или полем перечисления (Domain, DTO, ViewModel)? Внутри классов POCO или снаружи, на каждом слое нам нужно повторить этот код или нет?Свойство Automapper и enum
ответ
Определенно НЕ повторяйте код, так как это может привести к несоответствиям и трудно найти ошибки. Моя рекомендация состояла бы в том, чтобы размещать такие вещи в сборнике DLL с общими ссылками, чтобы он мог использоваться любым из ваших других уровней приложения без введения дополнительных зависимостей.
Лично я определяю в разделенном файле, например, если у него есть перечисление «Бла», которое будет определено в «Bla.cs», любой код, который использует это перечисление, будет использовать директиву «using». Но это совершенно необязательно, что определяет, где перечисление можно получить пространство имен, так:
- если определить в пространстве имен «Application» при обращении к ним по
Application.Bla
или просто «Bla», когда в том же самом Пространство имен - если определить внутри класса под названием «Aclass» до тех пор, вы определили его как общедоступный вы можете получить доступ к его
Aclass.Bla
мы используем домен, DTO, ViewModel ... многоуровневую архитектуру и, когда мы определите перечисления, которые необходимо использовать по слоям, мы определяем их только на уровне DTO. Это связано с тем, что слой DTO по определению доступен для всех слоев. Мы используем стандарт создания таких общих переходов за пределами классов, что делает его более удобочитаемым (т. Е. EnumName.EnumValue vs ClassName.EnumName.EnumValue), но я думаю, что это вопрос предпочтения.
hmm ... уровень доступа к данным знает о бизнес-слое? это правильное решение? – Dmitry
Я бы ожидал, что ваш уровень DTO будет довольно общим определением между уровнями, специфичными для данных и представления. Похоже на разумное решение для меня. – Jake
Наши службы доступа к данным возвращают объекты DTO (и да, они должны быть общими, то есть элементами уровня данных и элементами уровня представления), и, как правило, бизнес-уровень обменивается данными исключительно с объектами DTO. – sergio
DRY принцип?) – Dmitry