2012-07-01 20 views
1

有三個政黨在我的設計:依靠EventHandler命令調用是否好?

  • MSFT手持訂單
  • 納斯達克指數(需要重新計算時MSFT訂單量的變化)
  • MSFT策略(需要重新計算時MSFT手持訂單或納斯達克指數的變化)

所以我附上兩個NASDAQ indexMSFT strategyMSFT orderbook這樣:msftOrderBook.OrderbookUpdated += orderbookUpdated;

我還附上MSFT strategy來聽NASDAQ index改變的方法。

我有以下幾個問題:

  • 順序很重要。由於我想在重新計算策略之前重新計算NASDAQ index,因此在附加strategy之前,我應該附上NASDAQ indexorderBook。這是潛在的錯誤,因爲我沒有「保證」,我在正確的順序連接...
  • MSFT手持訂單被更新,它會通知NASDAQ index兩者NASDAQ indexMSFT orderbook通知MSFT strategy有關更新簡單的機制。所以MSFT strategy收到雙重更新,但我不需要。我只需要一次更新,因爲預計當MSFT訂單更改時,納斯達克指數也會發生變化。

問題:

  • 是好依靠的EventHandler調用的順序?如果它不好,那麼我的問題的一般解決方案是什麼?
  • 關於第二點我只是想在MSFT strategyMSFT orderBook更新中忽略,因爲策略知道每次orderBook更新納斯達克指數都已更新,所以僅對納斯達克指數更新做出反應就足夠了。但或許你可以建議一些完全不同的,更好..
+0

在.NET事件是同步的(http://stackoverflow.com/questions/7106454/are-c-sharp-events-synchronous),所以你可以依靠在訂單上。這是事件發生的順序 - 它與您附加處理程序的順序無關。雖然你可以依賴訂單,但我建議你的消費者應該確保事物的順序,而不是依靠提供者。業務邏輯imo不應該依賴外部方的實現邏輯 - 即使.net框架!如果第三方邏輯發生變化,你可能處於一個受到傷害的世界。 –

+0

@DavidHall我應該怎麼做,當我1.使用事件來通知消費者一些變化。 2.我需要按照特定順序通知消費者?我是否應該針對那些互相稱呼的事件介紹不同的事件? – javapowered

+0

我把問題看作是你是消費者還是事件 - 如果你正在提升事件,那麼這個事件的順序完全在你的控制之下。對於絕對必須遵守的事情,儘管我會考慮採用諸如引入FIFO隊列等架構方法。 –

回答

1

似乎很清楚:

  • MSFT手持訂單
  • 納斯達克指數(需要重新計算時MSFT訂單量的變化)
  • MSFT策略(需要在MSFT訂單或納斯達克指數變化時重新計算)

  • ,因爲我想納斯達克指數

    在一起,重新計算戰略

之前重新計算指本MSFT-策略取決於納斯達克指數僅間接影響MSFT-手持訂單。
因此,這需要納斯達克指數的變化事件,該策略可以訂閱。

儘管如此,我還是偏好沒有事件的方法,但目前尚不清楚這是否可行。


迴應評論:

class BusinessLayer 
{ 
    public void Update(Type data) 
    { 
     OrderBook.Update(data); 
     NasdaqIndex.Update(OrderBook); 
     NasdaqStrategy.Update(NasdaqIndex); 
    } 
} 
+0

任何方法都是可行的。我可以用什麼來代替事件,以及我會遇到什麼樣的問題? :) – javapowered

+0

事件會變得混亂。並不總是,但這是一個風險。 –

相關問題