Рекомендации по дизайну для перечисления

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

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


person Bhaskar    schedule 23.06.2010    source источник


Ответы (4)


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

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; }
}

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

person STO    schedule 23.06.2010

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

person ChrisW    schedule 23.06.2010

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

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

person Jason Williams    schedule 23.06.2010

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

person Otávio Décio    schedule 23.06.2010