我的设计中有三个方面:
- MSFT订单簿
- 纳斯达克指数(当MSFT订单簿发生变化时需要重新计算) MSFT
- 策略(当MSFT订单簿或纳斯达克指数发生变化时需要重新计算)
所以我把NASDAQ index
和MSFT strategy
都附在这样的MSFT orderbook
上:msftOrderBook.OrderbookUpdated += orderbookUpdated;
我还附加MSFT strategy
以相同的方式聆听NASDAQ index
变化。
我有以下问题:
- 顺序很重要。由于我希望在重新计算策略之前重新计算
NASDAQ index
,因此我应该在附加strategy
之前将NASDAQ index
附加到orderBook
。这是潜在的错误,因为我没有简单的机制来"保证"我以正确的顺序附加...... - 当
MSFT
订单簿更新时,它会通知NASDAQ index
,NASDAQ index
和MSFT orderbook
通知MSFT strategy
有关更新的信息。所以MSFT strategy
收到双重更新,但我不需要它。我只想要一次更新,因为预计当MSFT订单簿发生变化时,纳斯达克指数也会发生变化。
问题:
- 依靠
EventHandler
调用的顺序好吗? 如果不好,我的问题的一般解决方案是什么? - 关于第二点,我只想在更新
MSFT strategy
MSFT orderBook
忽略,因为策略知道每次订单簿更新时,纳斯达克指数也会更新,因此仅在纳斯达克指数更新时做出反应就足够了。但也许你可以提出一些完全不同的和更好的建议。
似乎很清楚:
- MSFT订单簿
- 纳斯达克指数(当MSFT订单簿发生变化时需要重新计算)
MSFT- 策略(当MSFT订单簿或纳斯达克指数发生变化时需要重新计算)
䋰
因为我希望在重新计算
- 策略之前重新计算纳斯达克指数
意味着MSFT策略依赖于纳斯达克指数,并且仅间接依赖于MSFT订单簿。
因此,这要求策略可以订阅的纳斯达克指数上的更改事件。
不过,我赞成一种没有事件的方法,但目前尚不清楚这是否可行。
对评论的回应:
class BusinessLayer
{
public void Update(Type data)
{
OrderBook.Update(data);
NasdaqIndex.Update(OrderBook);
NasdaqStrategy.Update(NasdaqIndex);
}
}