2016-02-19 66 views
1

假設我有一個框。盒子裏有一堆信封。在每個信封中,都有許多索引卡片。如果我在一張索引卡上寫一些東西,整個盒子裏的每張索引卡都應該執行foo()方法。分層事件處理程序

我看到它的方式,索引卡應該告訴它的信封發生了什麼事。它的信封應該告訴箱子某個索引卡發生了什麼。該框告訴所有的信封告訴他們所有的索引卡執行方法foo()。

我對C#的事件處理程序/代理功能相對不熟悉。從我所知道的看來,這似乎對他們很有用。代表們是否有辦法走到這裏,還是有更好的辦法?你將如何梳理出多級事件處理程序的框架?任何洞察力將不勝感激。

+1

對於發佈/訂閱模式看起來很不錯。所有索引卡片都將是訂閱者和潛在的發佈者 – Rob

回答

0

如果您確實想要使用事件處理函數,那麼您必須記住一個對象(在本例中爲索引卡)'擁有'一個事件並觸發它。它不應該關心誰或聽什麼。那麼它不關心索引卡片,信封或其他任何東西是否在聽它只是觸發它們。

如果我假設一個盒子在包含(或索引卡片)中有一個信封列表,並且信封中包含它包含的索引卡片列表,那麼您可以;

  1. 盒子監聽事件,並列舉其 包含了每一個信封其中列舉每個索引卡做更新。
  2. 信封收聽事件並列舉它們包含的每個索引卡
  3. 每張索引卡都會監聽事件並自行更新。

但是,我用這種方法看到的問題是索引卡的數量可能很高。所以你可以有很多索引卡收聽很多其他索引卡片。

我認爲在這種情況下,更好的辦法是採用Rob提出的發佈/訂閱方法。所以你實現了一個消息隊列,然後改變的索引卡在這裏發佈變化,並且所有聽到的變化都會被告知。這將是一個更好的方法。

但我認爲你的問題有點假設,所以你可以採取基於事件的方法來實現更小的實現,也許當你有少量的對象。