有三個政黨在我的設計:依靠EventHandler命令調用是否好?
- 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
更新中忽略,因爲策略知道每次orderBook更新納斯達克指數都已更新,所以僅對納斯達克指數更新做出反應就足夠了。但或許你可以建議一些完全不同的,更好..
在.NET事件是同步的(http://stackoverflow.com/questions/7106454/are-c-sharp-events-synchronous),所以你可以依靠在訂單上。這是事件發生的順序 - 它與您附加處理程序的順序無關。雖然你可以依賴訂單,但我建議你的消費者應該確保事物的順序,而不是依靠提供者。業務邏輯imo不應該依賴外部方的實現邏輯 - 即使.net框架!如果第三方邏輯發生變化,你可能處於一個受到傷害的世界。 –
@DavidHall我應該怎麼做,當我1.使用事件來通知消費者一些變化。 2.我需要按照特定順序通知消費者?我是否應該針對那些互相稱呼的事件介紹不同的事件? – javapowered
我把問題看作是你是消費者還是事件 - 如果你正在提升事件,那麼這個事件的順序完全在你的控制之下。對於絕對必須遵守的事情,儘管我會考慮採用諸如引入FIFO隊列等架構方法。 –