Руководство по проектированию для Перечисления - PullRequest
1 голос
/ 24 июня 2010

В одном из финансовых проектов Winform код приложения должен работать с такими значениями, как валюты. В объектной модели, которая представляет бизнес-объекты, есть поля, в которых должны храниться значения валют, такие как доллары США, евро и т. Д. Набор значений для этого поля, скорее всего, будет ограничен одной из стандартных валют и редко понадобится быть расширен для новых валют. Приложение получает входные данные валюты из элемента управления с графическим интерфейсом, который выводит эти значения из другого стандартного источника и отображается в виде раскрывающегося списка, хотя возможно, что пользователь вводит значение непосредственно в элемент управления. Логика приложения не зависит конкретно от значений валюты, и непосредственно над этими полями не выполняется никакой особой обработки, которая требует обращения к фактическим значениям, содержащимся в полях.

Теперь вопрос: целесообразно ли использовать перечисление, которое перечисляет такие значения, как доллары США, евро и т.п., чтобы значения валюты, полученные в коде, можно было проверять по перечислению? Если нет, то целесообразно ли оставить тот факт, что значения валют вводятся из раскрывающегося списка, чтобы в коде не требовались дополнительные проверки?

Ответы [ 4 ]

0 голосов
/ 24 июня 2010

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

class Currency
{
     public static reaonly IEnumerable<Currency> Currencies = new List<Currency>
     {
         new Currency { Name = "USD", CurrencySign = "$" },
         new Currency { Name = "EUR", CurrencySign = "€" }
     }

     public string Name {get; private set;}

     public string CurrencySign {get; private set;}

     public override ToString() { return Name; }
}

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

0 голосов
/ 24 июня 2010

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

Будьте осторожны с перечисляемыми типами, если вы планируете обфусцировать свой код - после затенения вы не сможете преобразовать значения перечисления в текст (так как они будут «зашифрованы»), поэтому вы больше не сможете использовать отражение для преобразования между перечисляемыми значениями и текстом (для заполнения элементов управления пользовательского интерфейса и / или сериализации в текстовые форматы)

0 голосов
/ 24 июня 2010

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

0 голосов
/ 24 июня 2010

Если код не обрабатывает значение валюты и если новое значение валюты может быть добавлено позже, то я бы закодировал значения валюты в виде строк (данных), а не в виде (жестко закодированных) значений перечисления.

...