2017-01-03 6 views
-1

Мне интересно, где я должен определить перечисление, если у нас есть многоуровневая архитектура и классы с этим свойством или полем перечисления (Domain, DTO, ViewModel)? Внутри классов POCO или снаружи, на каждом слое нам нужно повторить этот код или нет?Свойство Automapper и enum

ответ

0

Определенно НЕ повторяйте код, так как это может привести к несоответствиям и трудно найти ошибки. Моя рекомендация состояла бы в том, чтобы размещать такие вещи в сборнике DLL с общими ссылками, чтобы он мог использоваться любым из ваших других уровней приложения без введения дополнительных зависимостей.

+0

DRY принцип?) – Dmitry

0

Лично я определяю в разделенном файле, например, если у него есть перечисление «Бла», которое будет определено в «Bla.cs», любой код, который использует это перечисление, будет использовать директиву «using». Но это совершенно необязательно, что определяет, где перечисление можно получить пространство имен, так:

  1. если определить в пространстве имен «Application» при обращении к ним по Application.Bla или просто «Bla», когда в том же самом Пространство имен
  2. если определить внутри класса под названием «Aclass» до тех пор, вы определили его как общедоступный вы можете получить доступ к его Aclass.Bla
2

мы используем домен, DTO, ViewModel ... многоуровневую архитектуру и, когда мы определите перечисления, которые необходимо использовать по слоям, мы определяем их только на уровне DTO. Это связано с тем, что слой DTO по определению доступен для всех слоев. Мы используем стандарт создания таких общих переходов за пределами классов, что делает его более удобочитаемым (т. Е. EnumName.EnumValue vs ClassName.EnumName.EnumValue), но я думаю, что это вопрос предпочтения.

+0

hmm ... уровень доступа к данным знает о бизнес-слое? это правильное решение? – Dmitry

+0

Я бы ожидал, что ваш уровень DTO будет довольно общим определением между уровнями, специфичными для данных и представления. Похоже на разумное решение для меня. – Jake

+0

Наши службы доступа к данным возвращают объекты DTO (и да, они должны быть общими, то есть элементами уровня данных и элементами уровня представления), и, как правило, бизнес-уровень обменивается данными исключительно с объектами DTO. – sergio