C ++: Избегайте много булевых переменных для нескольких условий проверки в торговом приложении - PullRequest
1 голос
/ 21 декабря 2010

Я младший разработчик в торговом приложении ... у нас есть блок подтверждения обновления ордера. Необходимо подтвердить подтверждение заказа от биржи. Мы отправляем кучу разных запросов навалом (NEW, MODIFY, CANCEL) для обмена ... Проверка должна выполняться не более N раз с каждым интервалом T для всех заказов. если проверка прошла успешно для всех заказов, прежде чем N повторится, то все нормально. В противном случае нам нужно указать, что проверка не удалась. я сделал базовое кодирование в очень срочном порядке, как показано ниже

for( N times )
{
   for_each ( sent_request_order )   // SENT
   {
       1) get all the  refreshed order from DB or shared mem i.e REFRESHED
       2) find current sent order in REFRESHED 

       if( not_found )
            not refreshed from exchange, continue to next order

       if( found )

       case NEW :    //check for new status, mark verification done
       case MODIFY : //check for modified status.. 
                     //if not mark pending, go to next order, 
                     //revisit the same after T time
       case CANCEL : //check for cancelled status.. 
                     //if not mark pending, go to next order, 
                     //revisit the same after T time
   }

   if( all_verified )
       exit from verification.

   wait ( T sec )

}

order_verification_pending, order_verification_done, order_visited, order_not_visited, all_verified, all_not_verified ... много логических флагов, используемых для индикации ..

Есть ли лучший подход для этого .... Распределение обязанностей по классам ...... ????

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

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Ваш алгоритм выглядит работоспособным. Реализуй это.

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

0 голосов
/ 21 декабря 2010

Вы говорите о "order_verification_pending, order_verification_done, order_visited, order_not_visited, all_verified, all_not_verified" ... но это, кажется, удваивает число логических значений, например: если у вас есть order_visited, то вам не нужно order_not_visited .. это просто "!order_visited". Когда задействовано более двух состояний, используйте enum вместо множества сложных, пересекающихся логических значений. Например, если проверка может быть ожидающей, выполненной, неудачной и т. Д., Но все они взаимоисключающие, сохраните единственное текущее состояние в этом enum.

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

...