1

我是交易应用程序的初级开发人员......我们有一个订单刷新验证单元。它必须验证来自交易所的订单确认。我们批量发送一堆不同的请求(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 ...大量用于指示的布尔标志..

有没有更好的方法来做到这一点......在类之间划分职责......????

我知道这不是一个普遍的问题....但是旗帜仍然让我处理起来很麻烦...

4

2 回答 2

1

你的算法看起来可行。实施它。

在您开始工作之前不要尝试优化您的代码。一旦你运行了一个工作版本,不管有多丑,然后你看看优化的方法和方法。很有可能你会找到一种方法来处理给你带来很多麻烦的标志。

于 2010-12-21T06:37:55.210 回答
0

您谈论“order_verification_pending, order_verification_done, order_visited, order_not_visited, all_verified, all_not_verified”……但这似乎使布尔值的数量增加了一倍,例如:如果你有,order_visited那么你不需要 order_not_visited……它只是“ !order_visited” . 当涉及两个以上的状态时,请使用 anenum而不是许多复杂的重叠布尔值。例如,如果验证可能处于未决、已完成、失败等,但这些都是互斥的,则将单个当前状态存储在该enum.

拥有一组待处理的操作,并从该集合中删除元素,直到该集合为空或整个验证超时,这样会更优雅。这样,您就不会检查您已经发现成功的操作。

于 2010-12-21T06:48:07.570 回答