Правильное наименование значений перечисления для C#

#c# #enums #naming

Вопрос:

Как вы думаете, хорошая ли это идея-иметь такое перечисление:

 enum AvailableSpace {
   Percent10,
   Percent20,
   SqF500,
   SqF600
}
 

Вопрос заключается в семантике названий значений, т. е. как в процентах, так и в квадратных футах. Я действительно считаю, что это не очень хорошая идея, но я не смог найти и рекомендаций и т.д. В поддержку этого.

ИЗМЕНИТЬ: Это будет использоваться для определения состояния объекта, т. Е. как свойство только для чтения, описывающее состояние объекта. Если мы знаем общее пространство (т. Е. Сам объект знает его), у нас есть возможность преобразовать его внутренне, поэтому у нас есть либо только процент, либо квадратные футы, либо и то, и другое. Аргумент в том, что «и то, и другое» — не очень хорошая идея.

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

Вопрос только в семантике имен значений, а не в содержании — т. Е. Стоит ли указывать процент в (потенциальном) перечислении int.

Комментарии:

1. Не зная, как это используется, я не могу толком прокомментировать, хорошая это идея или нет.

2. Я отредактировал вопрос, извините, что не указал контекст.

Ответ №1:

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

Причина: Какова связь между значениями перечисления из двух шкал, таких как Percent10 и SqF600? Как вы расширяете список значений, которые вы можете представлять в своем коде? Как вы проводите сравнение и арифметические операции с этими значениями?

Предложение (не спрашивалось, но, тем не менее, вот оно. :-)): Семантика того, что вы пытаетесь сделать, будет лучше отражена структурой, содержащей два поля — одно для абсолютной области и одно для процента, доступного для этой абсолютной области. С такой структурой вы можете представлять все, что вы можете представлять с помощью перечислений выше. Например, поставщики данных, которые предоставляют вам абсолютную площадь, представлены структурой с площадью и 100% доступностью. Поставщики данных, которые предоставляют вам процент, представлены структурой с заданным ими процентом и абсолютной областью, так что процент этой области является фактической доступной областью, о которой поставщик данных хочет сообщить. Вы получаете «нормализованное» представление данных от поставщиков обоих типов, и вы можете добавить пару операторов для сравнения и арифметических вычислений с экземплярами.

Комментарии:

1. Я согласен, что если мне нужны значения для чего-то другого, кроме чистой презентации, я бы выбрал и то, и другое (возможно, в структуре). Но это всего лишь ограниченный список состояний (характеристик), которые мне нужно представить. Я просто не мог придумать лучшего объяснения.

2. Это не меняет ответа. Вы спросили, хорошо ли объединять их в одно перечисление — это не так. 🙂 Вам нужен какой-то «нормализованный» формат. Вторая часть моего предложения касается того, каким может быть это «нормализованное» представление, но вы вольны выбирать свое собственное. Однако перечисление — это не то.

Ответ №2:

Если это вообще возможно, я бы предпочел разбить ваш пример на два значения, где ваше перечисление равно «Процентам» и «квадратным футам», а второе значение является квантором. Свяжите их вместе в структуру.

Если контекст позволяет это, может быть еще лучше создать два типа оболочки «Процент» и «Квадратные метры», а затем создать некоторые перегрузки операторов, чтобы вы могли выполнять такие действия, как «новые квадратные метры(500) новые проценты(20)»; и исключить использование перечислений.

Обновление: Ваша схема именования была бы уместной, если бы значения были признанными отраслевыми терминами, почти до такой степени, чтобы быть символами. Например, безопасно иметь перечисление, содержащее такие значения, как «ISO9001», а не два значения (перечисление, содержащее «ISO» и int 9001). Также было бы уместно иметь перечисление, как показано ниже:

 public enum OperatingSystem
{
    Windows95,
    Windows98,
    Windows2000,
    WindowsXP,
    WindowsVista,
    MacOSClassic,
    MacOSXTiger,
    MacOSXLeopard
}
 

Если термины «Процент 10» и «Sqf500» не являются художественными терминами или четко определены в спецификации, словаре данных и т. Д., То нецелесообразно использовать их в качестве значений в перечислении.

Комментарии:

1. Я прояснил вопрос, пожалуйста, ознакомьтесь.