Boolean vs. Enum для ввода «Новый или Использованный» - PullRequest
5 голосов
/ 13 июня 2011

У меня, возможно, глупый вопрос ... Я пытаюсь определить, каков наилучший подход для ввода свойства, значение которого будет "Новое" или "Использовано".Я использую enum или я должен просто пойти с boolean (например, IsNew)?Если я пойду с enum, как мне назвать этот тип и имя свойства?(public NewOrUsed NewOrUsed {get; set;} <- сбивает с толку) </p>

Очевидно, что с enum у меня может быть состояние, которое не объявляет ни одно из значений (NONE, NEW, USED), а enum больше в будущемдоказательство (хотя можно утверждать, что нет никаких других ценностей).Опять же, какое имя подходит для такого типа и свойства?

С boolean - это довольно просто (либо с использованием IsNew, либо с IsUsed)

Я знаю, что это глупо, но яЛюбопытно, что думают другие

С уважением Z ..

Обновление

Если вы предпочитаете enum, прокомментируйте, какое должно быть подходящее имя для типа и свойства (например, public NewUsedType NewOrUsed {get; set;})

Ответы [ 7 ]

7 голосов
/ 13 июня 2011

enum более перспективно для будущего

Не совсем. Вы понятия не имеете, что принесет будущее. Если вам нужно изменить это позже, то измените его. Итак, KISS . Перейти с:

 public bool IsNew { get; set; }

Бум, готово. Двигайтесь дальше, добавьте ценность в другом месте.

4 голосов
/ 13 июня 2011

Используйте перечисление.Я бы назвал это Condition.Вам не нужно значение None.Вы можете просто сделать это обнуляемым.

3 голосов
/ 14 июня 2011

Вы упомянули в комментарии "У меня уже [sic] есть условие - оно относится к состоянию, когда что-то" Y "используется" (например, подержанный автомобиль / книга может быть "честным", "новым", "монетным "состояние);)"

Так что с этой информацией я бы определенно выбрал bool. У вас уже есть расширяемый способ установления условия, так что это более категоричная вещь. Возможно, когда-нибудь в будущем вам захочется чего-то, даже если более одного условия считается «Новое», например:

public enum ConditionType {Fair, LikeNew, Mint, New}

public ConditionType Condition { get; set; }

public bool IsNew
{
    get { return Condition == ConditionType.New || Condition == ConditionType.Mint; }
}
2 голосов
/ 13 июня 2011

Я бы пошел с перечислением, если бы обнаружил, что постоянно переводил логическое значение в значение «новое» или «использованное».

Если бы меня больше интересовало это значение в качестве индикатора (например, выполнение if(something.isNew)), я бы использовал логическое значение.

2 голосов
/ 13 июня 2011

Для New я бы использовал логическое значение, перечисление в этом случае было бы излишним.

1 голос
/ 13 июня 2011

Я вообще против чрезмерного проектирования, поэтому мой первый инстинкт использовал булево значение.

Но концептуально это не похоже на логическое логическое значение.Это похоже на перечисление, которое в данный момент имеет два значения.Обычно я думаю об условиях как new и used, а не как new и not new в моей голове.

Я ожидаю, что другие Condition будут добавлены в более поздний момент времени,такие как refurbished.Но, конечно, рефакторинг из одного свойства не будет таким сложным благодаря таким функциям IDE, как Find All References.И вам все равно нужно будет заново обработать логику, используя это свойство, как только вы добавите новые значения в перечисление.

Защита от будущего - менее важная причина для меня.То, что это не кажется концептуально чистым, является более важным для ИМО.

1 голос
/ 13 июня 2011

В eBay есть «Новый» и «Новый другой», чтобы различать товары, продаваемые в оригинальной упаковке, и товары, продаваемые в другой упаковке или без упаковки. Я бы пошел на перечисление для его расширяемости, что вы назвали "будущее".

...