Введите код против Enum для рефакторинга? - PullRequest
1 голос
/ 03 февраля 2011

Код типа (т.е. 1,2,3 (открытый, закрытый, неиспользуемый)) используется в моем проекте, и я хотел бы провести рефакторинг этой части кода. Должен ли я следовать Заменить код типа классом, как указано в Рефакторинг Улучшить дизайн существующего кода или достаточно просто использовать enum? C # - мой язык программирования.

Ответы [ 4 ]

5 голосов
/ 03 февраля 2011

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

1 голос
/ 03 февраля 2011

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

http://www.blackwasp.co.uk/State.aspx

0 голосов
/ 28 апреля 2011

Re шаблон состояния, предложенный Splendor. Мне не нравится шаблон State, определенный в GOF, поскольку он не включает ничего общего с действиями по переходу состояний и не определяет, какие переходы состояний допустимы. ИМО, есть более подходящие подходы к управлению состоянием, чем этот шаблон (однако, определенно стоит прочитать о шаблонах, если у вас их нет).

Чтобы ответить на ваш вопрос, я бы просто использовал Enums. На этом этапе стоит рассмотреть пространства имен.

Вы можете помещать перечисления в свои классы.

public class Box
{
    public enum  BoxState { Open, Closed, Unused }
}

или непосредственно в пространство имен:

namespace MyOrg.Enums
{
    public enum BoxState { Open, Closed, Unused }
}

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

0 голосов
/ 03 февраля 2011

Да, использование enum «достаточно», если вы хотите выполнять только минимальный объем работы, но лучше заменить его классом.

...