Перечисления против строковых констант c # - PullRequest
0 голосов
/ 24 ноября 2018

Итак, я недавно прочитал книгу, посвященную инъекции зависимостей.В этой книге где-то говорится, что перечисления являются запахом кода ...

Я хотел получить общее согласие от SO'ers.Мне нужно спроектировать довольно большое приложение с некоторыми центральными базовыми классами, и я ищу помощи в терминах принципов проектирования, которые будут использовать коллеги SO в этом случае, прежде чем посвятить себя тому или иному пути, что впоследствии очень затруднит изменения.

public enum Foo
{
  LovelyFoo,
  TerribleFoo
}

ИЛИ

Использование статического класса с Contants

public static class Foo
{
    public const string LovelyFoo = nameof(LovelyFoo); //or "Lovely Foo";
    public const string TerribleFoo = nameof(TerribleFoo); // or "Terrible Foo";
}

Затем, конечно, используя его при необходимости

Foo MyFoo = Foo.LovelyFoo;

ИЛИ

string MyFoo = Foo.LovelyFoo;

1 Ответ

0 голосов
/ 24 ноября 2018
  1. То, что чем-то можно злоупотреблять, не означает, что его плохо использовать.

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

  3. Перечисления хороши для тесно связанных наборов вещей, например, для дней недели.

    • Где было допустимое использование операторов switch
    • Где набор не меняется и укоренился.
    • Где (и это круговые я знаю) перечисления имеют смысл

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

Наконец, запустите тест Microsoft над вашими вариантами использования.То есть, что бы сделала Microsoft, где в BCL вы видели этот пример, является ли она обычной, Microsoft использует их вот так.Хотя это не спасительная грация, если вы обнаружите, что сами пишете странные и удивительные структуры, которые непредсказуемы и никто не видел, то вы, вероятно, делаете что-то не так

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...