Enum - class
От: busk  
Дата: 16.04.17 05:06
Оценка:
Привет

в приложении по продажам есть сущность состояние заказа.
Так вот есть таблица OrderState. Также хочется завести enum чтобы в логике приложения проверять не так if(OrderState != 2) а по enum

как вы делаете такие вещи?
Re: Enum - class
От: jazzer Россия Skype: enerjazzer
Дата: 16.04.17 07:41
Оценка: +2
Здравствуйте, busk, Вы писали:

B>в приложении по продажам есть сущность состояние заказа.

B>Так вот есть таблица OrderState. Также хочется завести enum чтобы в логике приложения проверять не так if(OrderState != 2) а по enum

Ну так enum для таких случаев и придуман, что смущает?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Enum - class
От: okman Беларусь https://searchinform.ru/
Дата: 16.04.17 08:53
Оценка:
Здравствуйте, busk, Вы писали:

B>Привет


B>в приложении по продажам есть сущность состояние заказа.

B>Так вот есть таблица OrderState. Также хочется завести enum чтобы в логике приложения проверять не так if(OrderState != 2) а по enum

B>как вы делаете такие вещи?


В C++11 есть enum class.

А делаю как-то так (внимание, C++98/03!):
struct State
{
    enum t
    {
        Pending,
        Approved,
        Completed,
        Rejected
    };
};

void checkOrder(State::t state)
{
    if (State::Completed == state)
    {
        // ...
    }
}
Re[2]: Enum - class
От: busk  
Дата: 16.04.17 09:13
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, busk, Вы писали:


B>>в приложении по продажам есть сущность состояние заказа.

B>>Так вот есть таблица OrderState. Также хочется завести enum чтобы в логике приложения проверять не так if(OrderState != 2) а по enum

J>Ну так enum для таких случаев и придуман, что смущает?


смущает, что есть класс OrderState который маппится на класс

class OrderState 
{
   id, name
}


и есть

enum OrderState 
{
   states
}


это нормально?
есть тогда правило именования может для энама?
Отредактировано 01.05.2017 13:43 VladD2 . Предыдущая версия .
Re[2]: Enum - class
От: busk  
Дата: 16.04.17 09:15
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, busk, Вы писали:


B>>Привет


B>>в приложении по продажам есть сущность состояние заказа.

B>>Так вот есть таблица OrderState. Также хочется завести enum чтобы в логике приложения проверять не так if(OrderState != 2) а по enum

B>>как вы делаете такие вещи?


O>В C++11 есть enum class.


O>А делаю как-то так (внимание, C++98/03!):

O>
O>struct State
O>{
O>    enum t
O>    {
O>        Pending,
O>        Approved,
O>        Completed,
O>        Rejected
O>    };
O>};

O>void checkOrder(State::t state)
O>{
O>    if (State::Completed == state)
O>    {
O>        // ...
O>    }
O>}
O>


интересный подход
Re: Enum - class
От: MozgC США http://nightcoder.livejournal.com
Дата: 17.04.17 02:37
Оценка: 64 (1)
Здравствуйте, busk, Вы писали:

B>как вы делаете такие вещи?


Если значения enum'а могут быть получены из таблицы БД, то мы по таким таблицам генерируем enum'ы с помощью T4.
Re: Enum - class
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 17.04.17 12:56
Оценка:
Здравствуйте, busk, Вы писали:

B>как вы делаете такие вещи?

Делаю иерархию:
OrderState — — — StateAccept
|
|
|
State pending
и метод handle(xxx)
Что в итоге можно развернуть в визитор по необходимости.
Хотя если нужно что-то простое, то делаю как okman говорит — nested enum.
Sic luceat lux!
Re[3]: Enum - class
От: fmiracle  
Дата: 17.04.17 13:50
Оценка:
Здравствуйте, busk, Вы писали:

B>смущает, что есть класс OrderState который маппится на класс


B>class OrderState

B>{
B> id, name
B>}

B>и есть


B>enum OrderState

B>{
B> states
B>}

B>это нормально?

B>есть тогда правило именования может для энама?

А нужно ли мэппить в код OrderState? Я раньше мэппил, но потом оказалось? что это обычно не нужно же. Если это просто себе список возможных значений в БД для проверки целостности — ну пусть там и живет, а в коде оперировать только enum-ом
Тем не менее, если все же есть такие совпадения, то просто enum называется как-то иначе, например OrderStateValue или как-то так, главное чтобы едино по всему проекту.
Re[4]: Enum - class
От: busk  
Дата: 17.04.17 18:48
Оценка:
Здравствуйте, fmiracle, Вы писали:

F>Здравствуйте, busk, Вы писали:


B>>смущает, что есть класс OrderState который маппится на класс


B>>class OrderState

B>>{
B>> id, name
B>>}

B>>и есть


B>>enum OrderState

B>>{
B>> states
B>>}

B>>это нормально?

B>>есть тогда правило именования может для энама?

F>А нужно ли мэппить в код OrderState?


нужно в фильтры выводить айди — текст для пользовтеля
Re[3]: Enum - class
От: Adnin  
Дата: 17.04.17 21:48
Оценка:
B>смущает, что есть класс OrderState который маппится на класс

B>class OrderState

B>{
B> id, name
B>}

B>и есть


B>enum OrderState

B>{
B> states
B>}

B>это нормально?

B>есть тогда правило именования может для энама?

Если позволяет язык, то встраиваем об'явление enum в клас. Можно назвать напеример STATES.

Cоответственно код буде такой:

if (this.state == STATES.NEW) {
  ...
}


или

if (order.getState() == OrderState.STATES.NEW) {
  ...
}
Отредактировано 01.05.2017 13:44 VladD2 . Предыдущая версия . Еще …
Отредактировано 17.04.2017 22:16 Adnin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.