Какой слой я должен объявить перечислениями?


У меня есть проект C# N-Layer, который имеет 5 слоев: 1-инфраструктура 2-домен 3-AppService 4-Распределенная Услуга 5-презентация

Я хочу использовать перечисления в своем проекте. но я не знаю, какой слой их описывает. У меня есть две идеи на этот счет.

1-объявляйте перечисления в домене и проходите через сеть по WCF DataContract.

2-объявить перечисления в проекте библиотеки классов (например, в общем слое) и построить его как dll и использовать его во всех слоях.

Помогите мне выбрать один.

3 3

3 ответа:

Это зависит от того, где вам нужно использовать значения, которые представляют перечисления. Если это значения, которые понадобятся вашему слою презентации, то именно туда они и должны попасть. Если это что-то, на что будет полагаться ваш уровень обслуживания, то вам нужно поместить их туда.

Я не уверен, что лучший подход-это объединить все ваши перечисления в одном месте. Они должны быть распределены по всему приложению, на самом нижнем уровне, который полагается на них, обычно в том же пространстве имен, что и класс это потребляет перечисление и выполняет некоторую логику над ними.

Если приложение и домен будут использовать их, то объявите их в домене и передайте значение через сеть.

Я хотел бы поделиться своим мнением относительно этой проблемы:

  • Стратегия 1: доменный слой определяет перечисление AddressType (имея дом, работу...). Service layer определяет другое перечисление AddressTypeDto со всеми значениями Home, Work...) и они на самом деле карта от AddressType ==> AddressTypeDto. На уровне представления также будет использоваться тип AddressTypeDto.

  • Стратегия 2: создание слоя (not really a layer) который содержит общие типы перечисления и использовать его в различных слоях от Домен / Услуга / Презентация

S1: он сохраняет все уровни домен/сервис/представление независимыми, но требует больше классов, чтобы представить то же самое.

S2: он сохраняет все уровни домен/сервис/представление независимыми, но требует их в зависимости от" общей " dll.

Я видел приложения, которые реализуют одну из двух стратегий. Я сам выберу Strategy 2 так как это более эффективно. Почти приложения часто имеют общие вещи, некоторые типы перечисления должны быть там.

Если это нужно использовать только в каком-то определенном слое, то объявите его в этом слое. Если вы хотите использовать его во всех слоях, то он должен быть объявлен в каком-то общем слое и ссылка должна быть добавлена ко всем слоям, которые его используют.